<?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>165510</bug_id>
          
          <creation_ts>2016-12-06 20:24:27 -0800</creation_ts>
          <short_desc>WebAssembly: Make more demos run</short_desc>
          <delta_ts>2017-03-10 18:04:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>165118</dependson>
          <blocked>161709</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1257160</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-06 20:24:27 -0800</bug_when>
    <thetext>WebAssemblyModuleRecord::link has a FIXME to implement it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261765</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-20 14:28:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/29760310&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284237</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-07 00:36:13 -0800</bug_when>
    <thetext>Seems like this error is raised now in http://webassembly.org/demo/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285548</commentid>
    <comment_count>3</comment_count>
      <attachid>303980</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 13:36:06 -0800</bug_when>
    <thetext>Created attachment 303980
WIP

need to add some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285705</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 17:18:13 -0800</bug_when>
    <thetext>This demo now runs for me:
https://kripken.github.io/BananaBread/cube2/bb.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285707</commentid>
    <comment_count>5</comment_count>
      <attachid>304013</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 17:21:23 -0800</bug_when>
    <thetext>Created attachment 304013
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285719</commentid>
    <comment_count>6</comment_count>
      <attachid>304017</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 18:05:43 -0800</bug_when>
    <thetext>Created attachment 304017
WIP

I think it&apos;s done. Just need some tests now for the wrapper function I added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285735</commentid>
    <comment_count>7</comment_count>
      <attachid>304023</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-09 19:39:06 -0800</bug_when>
    <thetext>Created attachment 304023
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285736</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 19:42:02 -0800</bug_when>
    <thetext>Attachment 304023 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285869</commentid>
    <comment_count>9</comment_count>
      <attachid>304023</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-10 11:49:45 -0800</bug_when>
    <thetext>Comment on attachment 304023
patch

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

r=me.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1064
&gt; +    RELEASE_ASSERT(toSave.numberOfSetGPRs() == toSaveSize);

I&apos;m not sure this needs to be a release assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285905</commentid>
    <comment_count>10</comment_count>
      <attachid>304072</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-10 14:02:41 -0800</bug_when>
    <thetext>Created attachment 304072
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285906</commentid>
    <comment_count>11</comment_count>
      <attachid>304073</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-10 14:06:53 -0800</bug_when>
    <thetext>Created attachment 304073
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285954</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 16:09:20 -0800</bug_when>
    <thetext>Attachment 304073 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285961</commentid>
    <comment_count>13</comment_count>
      <attachid>304091</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-10 16:18:33 -0800</bug_when>
    <thetext>Created attachment 304091
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285966</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 16:20:27 -0800</bug_when>
    <thetext>Attachment 304091 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286026</commentid>
    <comment_count>15</comment_count>
      <attachid>304091</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 18:04:40 -0800</bug_when>
    <thetext>Comment on attachment 304091
patch for landing

Clearing flags on attachment: 304091

Committed r213745: &lt;http://trac.webkit.org/changeset/213745&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286027</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-10 18:04:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303980</attachid>
            <date>2017-03-09 13:36:06 -0800</date>
            <delta_ts>2017-03-09 17:21:23 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>22670</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM2NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNTJDMDYxMUYxQUE1
MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5
QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVF
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBC
IC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMx
Mzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBX
YXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3Bz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVE
RTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzczLDYgKzM3NzUsOCBAQAogCQk1MkMwNjExRDFB
QTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJD
OTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBl
UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFF
QjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFG
N0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFE
QzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODg0LDYgKzc4
ODgsOCBAQAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdl
YkFzc2VtYmx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMTksNiArODIyNSw3
IEBACiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENv
bGxlY3Rpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25T
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjcsNiArMTAzMzQsNyBAQAogCQkJCUE1
MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3
RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1
NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjEzNjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNo
YXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKICAgICB9CiAKKyAgICB2b2lkKiB3YXNt
Q2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbXBvcnRJbmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOworICAg
ICAgICByZXR1cm4gbV93YXNtRXhpdFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9XYXNtLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEJhZzxDYWxsTGlua0luZm8+
JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBXYXNtOjpNZW1vcnk6Ok1vZGUsIHVu
c2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
Y3BwCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAg
SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVgogICAgIC8vIEZJWE1FOiBJ
dCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVyZS4gVGhl
IHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBCdXQgZm9yIG5vdywgd2UncmUgbm90
IGRvaW5nIHRoYXQuCiAgICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVG
dW5jdGlvbj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3Jp
dGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJp
ZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsK
KyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+Ojpt
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsK
ICAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rp
b24oKTsKICAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGlu
IGNvbXBpbGVkIGNvZGUuCi0gICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgICAgICBuZXcgKCZtX2pzRnVu
Y3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAgICAgfQogfQogCkBA
IC0xMDYsMTEgKzEwNiwxMSBAQCBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJf
dCBuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6
ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXpl
KSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgbV9q
c0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRp
Y19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXpl
OyBpIDwgbmV3U2l6ZTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ld
KSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMu
Z2V0KClbaV0pIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgICAgICBu
ZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAg
ICAgfQogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTksNyAr
MTE5LDcgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3Qgbgogdm9pZCBK
U1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgIG1fanNGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdID0gV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAgbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAgICAgbV9m
dW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwogICAgIEFT
U0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2ln
bmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29k
ZS4KIH0KQEAgLTEzMSw2ICsxMzEsMTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1
bmN0aW9uKFZNJgogICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxl
RnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCksIGZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludCgpKTsKIH0KIAordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2
bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV9qc0Z1bmN0aW9u
cy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CisgICAgbV9mdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lv
biAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIApAQCAtNTAsMTMgKzUxLDE0IEBAIHB1
YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhpbXVtOyB9CiAgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZ2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCisg
ICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwogICAgICAgICByZXR1cm4gbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1
aW50MzJfdCBpbmRleCk7CiAgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQz
Ml90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseVRhYmxlLCBtX3NpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0
aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVu
Y3Rpb25zKTsgfQpAQCAtNzQsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIE1hbGxvY1B0cjxXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKLSAgICBNYWxsb2NQdHI8V3JpdGVCYXJy
aWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+PiBtX2pzRnVuY3Rpb25zOworICAgIE1hbGxvY1B0cjxX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+PiBtX2pzRnVuY3Rpb25zOwogICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1fbWF4aW11bTsKICAgICB1aW50MzJfdCBtX3NpemU7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDEsMTQgKzI0MSwzMCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0
CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlc1tp
XTsKKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2NrLT5mdW5j
dGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVl
IHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIpKSk7
CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGpzQ2FzdDxK
U09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPih2bSwgZnVuY3Rpb25JbXBvcnQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1
bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0
YWJsZUluZGV4LCB3YXNtRnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZt
LCB0YWJsZUluZGV4LCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK3RhYmxlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb25JbXBvcnQsIGZ1bmN0aW9u
SW5kZXgsIGNvZGVCbG9jaywgc2lnbmF0dXJlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Kyt0YWJsZUluZGV4OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9p
bnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAg
IGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAw
LgogICAgICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxl
IGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKLSAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogcmVzdWx0ID0gdGFibGUt
PmdldEZ1bmN0aW9uKGluZGV4KSkKKyAgICBpZiAoSlNPYmplY3QqIHJlc3VsdCA9IHRhYmxlLT5n
ZXRGdW5jdGlvbihpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIH0KQEAgLTEyMCw4ICsx
MjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCB2YWx1
ZSk7Ci0gICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiAhZnVuY3Rpb24pIHsKKyAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgdmFsdWUpOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNt
V3JhcHBlckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bio+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiAhd2FzbUZ1bmN0aW9u
ICYmICF3YXNtV3JhcHBlckZ1bmN0aW9uKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNlY29uZCBh
cmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1bmN0aW9u
IikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEzOSw4ICsxNDAsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIGlmICh2YWx1ZS5pc051bGwoKSkK
ICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQoISFmdW5jdGlvbik7Ci0gICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5k
ZXgsIGZ1bmN0aW9uKTsKKyAgICAgICAgQVNTRVJUKCEhd2FzbUZ1bmN0aW9uIHx8ICEhd2FzbVdy
YXBwZXJGdW5jdGlvbik7CisgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICB0
YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCB3YXNtRnVuY3Rpb24pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCB3YXNtV3JhcHBlckZ1
bmN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgfTsKKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2Fz
bUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KHZt
LCBleGVjLT5qc0NhbGxlZSgpKTsKKyAgICBpZiAoIXdhc21GdW5jdGlvbikKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5IGZ1bmN0aW9uIikpKTsKKworICAg
IENhbGxEYXRhIGNhbGxEYXRhOworICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IHdhc21GdW5jdGlv
bi0+ZnVuY3Rpb24oKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RU
YWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAgIHNjb3BlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChleGVjKSkpOworfQorCitXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSkK
KyAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorICAgICwgbV93YXNtRW50
cnlwb2ludENvZGUod2FzbUVudHJ5cG9pbnRDb2RlKQorICAgICwgbV9zaWduYXR1cmVJbmRleChz
aWduYXR1cmVJbmRleCkKK3sgfQorCitXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgpCit7CisgICAgU3RyaW5nIG5hbWUgPSAiIjsKKyAgICBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxs
cHRyLCBuYW1lKTsKKyAgICAvLyBGSVhNRTogY2FjaGUgdGhlIHN0cnVjdHVyZQorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBzaWduYXR1cmVJbmRleCwgY29kZUJsb2NrLT53YXNtQ2Fs
bFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUq
IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1
cmVJbmRleCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBjb2RlQmxvY2spOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFs
dWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24oKSk7CisgICAgbV9mdW5jdGlvbi5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Cit9
CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQoreworICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CisKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCosIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlSW5kZXg7
IH0KKyAgICB2b2lkKiB3YXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fd2FzbUVudHJ5cG9pbnRD
b2RlOyB9CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4
ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3Qq
LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKik7CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OlNp
Z25hdHVyZUluZGV4LCB2b2lkKiB3YXNtRW50cnlwb2ludENvZGUpOworCisgICAgLy8gV2Uga2Vl
cCBhIHJlZmVyZW5jZSB0byBvdXIgQ29kZUJsb2NrIGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdworICAg
IC8vIHBvaW50ZXIgdG8gYXNtIGNvZGUgdGhhdCBpdCBvd25zLgorICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fZnVuY3Rpb247CisgICAgdm9pZCogbV93YXNtRW50cnlwb2ludENvZGU7CisgICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggbV9zaWduYXR1cmVJbmRleDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304013</attachid>
            <date>2017-03-09 17:21:23 -0800</date>
            <delta_ts>2017-03-09 18:05:43 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>35577</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM2NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNTJDMDYxMUYxQUE1
MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5
QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVF
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBC
IC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMx
Mzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBX
YXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3Bz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVE
RTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzczLDYgKzM3NzUsOCBAQAogCQk1MkMwNjExRDFB
QTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJD
OTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBl
UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFF
QjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFG
N0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFE
QzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODg0LDYgKzc4
ODgsOCBAQAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdl
YkFzc2VtYmx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMTksNiArODIyNSw3
IEBACiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENv
bGxlY3Rpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25T
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjcsNiArMTAzMzQsNyBAQAogCQkJCUE1
MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3
RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1
NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjEzNjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNo
YXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKICAgICB9CiAKKyAgICB2b2lkKiB3YXNt
VG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW1wb3J0SW5kZXggPCBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fd2FzbUV4aXRTdHVic1tpbXBvcnRJbmRleF0ud2FzbVRvSnMuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5m
bz4mJiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeTo6TW9kZSwg
dW5zaWduZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzksODUgKzEwMzksMTU4IEBAIHZvaWQg
QjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q28KIAogc3RhdGljIHZvaWQgY3JlYXRl
SlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNv
bnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlKiBz
aWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogewotICAgIFByb2NlZHVy
ZSBwcm9jOwotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOworICAgIEND
YWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CiAK
LSAgICBPcmlnaW4gb3JpZ2luOworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCi0g
ICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmZnVuY3Rpb24u
anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHByb2MsIG9yaWdpbiwgYmxvY2spOworICAgIC8v
IEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVl
TW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyKiBsaW5rZWRDYWxsZWVNb3ZlID0gJmZ1bmN0aW9uLmpzVG9XYXNt
Q2FsbGVlTW92ZUxvY2F0aW9uOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoY2FsbGVlTW92ZUxvY2F0aW9uKTsKKyAgICB9KTsKKworICAgIFJlZ2lzdGVyU2V0
IHRvU2F2ZTsKKyAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpOworICAgIHRvU2F2ZS5zZXQocGlubmVkUmVncy5iYXNlTWVt
b3J5UG9pbnRlcik7CisgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJ
bmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQorICAgICAgICB0b1NhdmUuc2V0KHJlZ0lu
Zm8uc2l6ZVJlZ2lzdGVyKTsKKworICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0b1NhdmUubnVt
YmVyT2ZTZXRHUFJzKCk7CisgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKKyAgICAvLyBUaGV5IHNob3VsZCBhbGwgYmUgY2FsbGVlIHNhdmVzLgor
ICAgIFJFTEVBU0VfQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1NhdmVTaXpl
KTsKKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsK
KyAgICBmdW5jdGlvbi5qc1RvV2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJl
Z2lzdGVyc1RvU3BpbGw7CisKKyAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVy
c1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSArPSBX
YXNtQ2FsbGluZ0NvbnZlbnRpb246OnRoZUhlYWRlclNpemUoKTsKKyAgICB0b3RhbEZyYW1lU2l6
ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7
CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUtPmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBj
YXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNp
emUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6
CisgICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2Zw
ckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2
b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CiAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAv
LyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBKUyB3cmFwcGVyIHRoYXQgaGFuZGxl
cyBjYWxscyB0byB1cy4KLSAgICAgICAgLy8gSnVzdCBwcmV2ZW50IGFnYWluc3QgY3Jhenkgd2hl
biBBU1NFUlQgaXMgZW5hYmxlZC4KLSAgICAgICAgVmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwot
ICAgICAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAq
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBvcmlnaW4sCi0gICAg
ICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwgZnJhbWVQ
b2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVT
aXplKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxG
cmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAg
ICAgIFZhbHVlKiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgb3JpZ2luLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAg
Zm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3Bp
bGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAg
ICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGpp
dC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQogCi0gICAgICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50
Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9y
aWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBv
cmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3VudCwgYXJndW1lbnRDb3VudCkpOworICAgIHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMg
PSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0
IHRoZSBzY3JhdGNoIHJlZ2lzdGVycyBhZnRlciB0aGlzLgorICAgICAgICBHUFJSZWcgc2NyYXRj
aFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRyZGlmZl90
IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc2l6ZW9mKHZvaWQqKTsK
KyAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMg
Pj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBXYXNtOjpJMzIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0
aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6
RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9m
cHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRv
cihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKLSAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIH0pOworICAgICAgICAg
ICAganNPZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IEZJWE1FIFRoZSBpbnN0YW5jZSBpcyBjdXJyZW50bHkgc2V0IGJ5IHRoZSBDKysgY29kZSBpbiBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjYWxsLiBXZSBzaG91bGRuJ3QgZ28gdGhyb3VnaCB0aGUgZXh0
cmEgQysrIGhvb3AuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0
ODYKLSAgICBWYWx1ZSogaW5zdGFuY2UgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihw
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKLSAgICAgICAgYmxvY2stPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLnRvcEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSkpOwotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKHZtLCBpbmZvLm1l
bW9yeSwgaW5zdGFuY2UsIHByb2MsIGJsb2NrKTsKLQotICAgIC8vIEdldCBvdXIgYXJndW1lbnRz
LgotICAgIFZlY3RvcjxWYWx1ZSo+IGFyZ3VtZW50czsKLSAgICBqc2NDYWxsaW5nQ29udmVudGlv
bigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLCBwcm9jLCBibG9jaywgb3JpZ2luLCBbJl0gKFZh
bHVlKiBhcmd1bWVudCwgdW5zaWduZWQpIHsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChhcmd1
bWVudCk7Ci0gICAgfSk7Ci0KLSAgICAvLyBNb3ZlIHRoZSBhcmd1bWVudHMgaW50byBwbGFjZS4K
LSAgICBWYWx1ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKHBy
b2MsIGJsb2NrLCBvcmlnaW4sIGFyZ3VtZW50cywgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5U
eXBlKCkpLCBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewotICAgICAgICBDb21w
aWxhdGlvbkNvbnRleHQqIGNvbnRleHQgPSAmY29tcGlsYXRpb25Db250ZXh0OwotCi0gICAgICAg
IC8vIHdhc20gLT4gd2FzbSBjYWxscyBjbG9iYmVyIHBpbm5lZCByZWdpc3RlcnMgdW5jb25kaXRp
b25hbGx5LiBUaGlzIEpTIC0+IHdhc20gdHJhbnNpdGlvbiBtdXN0IHRoZXJlZm9yZSByZXN0b3Jl
IHRoZXNlIHBpbm5lZCByZWdpc3RlcnMgKHdoaWNoIGFyZSB1c3VhbGx5IGNhbGxlZS1zYXZlZCkg
dG8gYWNjb3VudCBmb3IgdGhpcy4KLSAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBw
aW5uZWRSZWdzID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Ci0gICAgICAgIFJlZ2lzdGVy
U2V0IGNsb2JiZXJzOwotICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9y
eVBvaW50ZXIpOwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdp
c3RlcnMpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOwotICAg
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Ci0gICAgICAgIHBh
dGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOworICAgIGlmICghIWluZm8ubWVtb3J5KSB7Cisg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
KyAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgYmFzZU1l
bW9yeSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsKKyAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
cnM7CisgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgIEFTU0VS
VCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVz
IHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMg
cmVsYXRpdmUgdG8gMC4KKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
LCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgIH0KIAotICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW2NvbnRleHRdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
anNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwgPSBqaXQuY2FsbCgpOwogCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCA9IGNhbGw7Ci0gICAgICAg
IH0pOwotICAgIH0pOworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZz
ZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNl
dC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KIAotICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0LCBpZiBuZWVkZWQuCiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5cGUoKSkg
ewotICAgIGNhc2UgV2FzbTo6Vm9pZDoKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4pOwotICAgICAgICBicmVhazsKICAgICBjYXNl
IFdhc206OkYzMjoKKyAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXYXNtOjpGNjQ6Ci0gICAgICAgIHJlc3VsdCA9IGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdHdpc2VDYXN0LCBvcmlnaW4sIHJlc3VsdCk7Ci0gICAgICAgIEZBTExUSFJPVUdIOwot
ICAgIGNhc2UgV2FzbTo6STMyOgotICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBibG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIG9yaWdpbiwgcmVzdWx0KTsK
KyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RnVuYzoKLSAgICBjYXNlIFdhc206OkFueWZ1bmM6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgQjM6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MpOwotICAgIEIzOjpnZW5lcmF0ZShwcm9jLCAqY29t
cGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVCk7Ci0gICAgY29tcGlsYXRpb25Db250ZXh0
LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAg
ZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jLmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICBqaXQucmV0KCk7CiB9CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRpb25Db250
ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1
bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWduZWQgb3B0
TGV2ZWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYg
Kzg0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgdW5zaWduZWQg
dGhlSGVhZGVyU2l6ZSgpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KICAgICB2b2lkIHNldHVwRnJh
bWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogY2FsbGVlTW92ZUxvY2F0aW9u
LCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhp
cyBoZXJlIGZvciBub3cuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDExICs2NCwxMSBAQCBKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNz
ZW1ibHlUYWJsZShWCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBw
cmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgog
ICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KICAgICBtX2Z1bmN0aW9u
cyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAg
bV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlv
bj4+OjptYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQ
dHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgewogICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5n
ZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwogICAgICAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlk
SW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KLSAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KCk7CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmll
cjxKU09iamVjdD4oKTsKICAgICB9CiB9CiAKQEAgLTEwNiwxMSArMTA2LDExIEBAIGJvb2wgSlNX
ZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG4KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikg
KiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zLnJlYWxs
b2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG5ld1NpemUpKTsKKyAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdy
aXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CiAK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKICAgICAg
ICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
LSAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFz
c2VtYmx5RnVuY3Rpb24+KCk7CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0p
IFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKICAgICB9CiAgICAgbV9zaXplID0gbmV3U2l6ZTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBuCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5j
dGlvbih1aW50MzJfdCBpbmRleCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6
ZSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4oKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdyaXRl
QmFycmllcjxKU09iamVjdD4oKTsKICAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKCk7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdl
IHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgogfQpAQCAtMTMxLDYgKzEzMSwxMyBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mCiAgICAgbV9mdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOwogfQogCit2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJs
ZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0
ci5oPgogCkBAIC01MCwxMyArNTEsMTQgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KICAgICB1aW50MzJf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90
IG5ld1NpemUpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBn
ZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKKyAgICBKU09iamVjdCogZ2V0RnVuY3Rpb24odWlu
dDMyX3QgaW5kZXgpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6
ZSk7CiAgICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKICAg
ICB9CiAgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KTsKICAgICB2b2lkIHNl
dEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9CkBAIC03NCw3ICs3Niw3IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+IG1fZnVuY3Rp
b25zOwotICAgIE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4+IG1f
anNGdW5jdGlvbnM7CisgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+IG1fanNG
dW5jdGlvbnM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwogICAgIHVp
bnQzMl90IG1fc2l6ZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTM2
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSwxNCArMjQxLDMwIEBAIEpTVmFsdWUgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgICAgICAvLyBmb3IgdGhl
IGltcG9ydC4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOworICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkVsZW1l
bnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90
IHlldCBpbXBsZW1lbnRlZC4gRklYTUUuIikpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4obV9pbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9u
ID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGZ1bmN0aW9uSW1wb3J0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3
YXNtV3JhcHBlckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
d2FzbUZ1bmN0aW9uIHx8IHdhc21XcmFwcGVyRnVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsIHdhc21GdW5jdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsIHdhc21XcmFwcGVyRnVu
Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGFibGVJbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5z
ZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpLCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJ
bmRleCkpOworICAgICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNv
ZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0
aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBp
ZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChXZWJBc3Nl
bWJseUZ1bmN0aW9uKiByZXN1bHQgPSB0YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQorICAgIGlm
IChKU09iamVjdCogcmVzdWx0ID0gdGFibGUtPmdldEZ1bmN0aW9uKGluZGV4KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpOwogfQpAQCAtMTIwLDggKzEyMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDEpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxX
ZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIHZhbHVlKTsKLSAgICBpZiAoIXZhbHVlLmlzTnVsbCgp
ICYmICFmdW5jdGlvbikgeworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCB2YWx1ZSk7CisgICAgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBqc0R5bmFtaWND
YXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4odm0sIHZhbHVlKTsKKyAgICBpZiAoIXZh
bHVlLmlzTnVsbCgpICYmICF3YXNtRnVuY3Rpb24gJiYgIXdhc21XcmFwcGVyRnVuY3Rpb24pIHsK
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKICAgICAgICAgICAgIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3Rv
dHlwZS5zZXQgZXhwZWN0cyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG51bGwgb3IgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuRnVuY3Rpb24iKSkpOwogICAgICAgICByZXR1cm4geyB9OwpA
QCAtMTM5LDggKzE0MCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICB0YWJsZS0+Y2xlYXJGdW5jdGlv
bihpbmRleCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCghIWZ1bmN0aW9uKTsKLSAgICAg
ICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgZnVuY3Rpb24pOworICAgICAgICBBU1NF
UlQoISF3YXNtRnVuY3Rpb24gfHwgISF3YXNtV3JhcHBlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5kZXgs
IHdhc21GdW5jdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5j
dGlvbih2bSwgaW5kZXgsIHdhc21XcmFwcGVyRnVuY3Rpb24pOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
IgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNs
dWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KSB9OworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4odm0sIGV4ZWMtPmpzQ2FsbGVlKCkpOworICAgIGlm
ICghd2FzbUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVkIGEgV2Vi
QXNzZW1ibHkgZnVuY3Rpb24iKSkpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNP
YmplY3QqIGZ1bmN0aW9uID0gd2FzbUZ1bmN0aW9uLT5mdW5jdGlvbigpOworICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBB
cmdMaXN0KGV4ZWMpKSk7Cit9CisKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCwgdm9pZCogd2FzbUVudHJ5cG9pbnRDb2RlKQorICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCisgICAgLCBtX3dhc21FbnRyeXBvaW50Q29kZSh3YXNtRW50cnlwb2ludENv
ZGUpCisgICAgLCBtX3NpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4KQoreyB9CisKK1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGZ1bmN0aW9u
LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2Nr
LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK3sKKyAgICBTdHJpbmcgbmFt
ZSA9ICIiOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVu
Y3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOworICAgIC8vIEZJWE1FOiBj
YWNoZSB0aGUgc3RydWN0dXJlCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlwZSgp
KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNpZ25h
dHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5k
ZXgpKTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
IG5hbWUsIGZ1bmN0aW9uLCBjb2RlQmxvY2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgs
IG5hbWUpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24o
KSk7CisgICAgbV9mdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2NvZGVC
bG9jay5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIEFTU0VSVChnbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
K30KKwordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9jayk7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworCisgICAgY29uc3Qgc3RhdGljIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNM
QVJFX0lORk87CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOworCisgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3NpZ25hdHVyZUluZGV4OyB9CisgICAgdm9pZCogd2FzbUVudHJ5cG9pbnQoKSB7
IHJldHVybiBtX3dhc21FbnRyeXBvaW50Q29kZTsgfQorICAgIEpTT2JqZWN0KiBmdW5jdGlvbigp
IHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworCitw
cml2YXRlOgorICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9p
bnRDb2RlKTsKKworICAgIC8vIFdlIGtlZXAgYSByZWZlcmVuY2UgdG8gb3VyIENvZGVCbG9jayBi
ZWNhdXNlIHdlIGhhdmUgYSByYXcKKyAgICAvLyBwb2ludGVyIHRvIGFzbSBjb2RlIHRoYXQgaXQg
b3ducy4KKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2s7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOworICAgIHZvaWQqIG1f
d2FzbUVudHJ5cG9pbnRDb2RlOworICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJl
SW5kZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304017</attachid>
            <date>2017-03-09 18:05:43 -0800</date>
            <delta_ts>2017-03-09 19:39:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>50487</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM2NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNTJDMDYxMUYxQUE1
MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5
QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcx
RUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVF
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBC
IC8qIFdhc21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMx
Mzc0QkYxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBX
YXNtUGxhbi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3Bz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVE
RTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNzczLDYgKzM3NzUsOCBAQAogCQk1MkMwNjExRDFB
QTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJD
OTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBl
UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFF
QjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFG
N0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
UGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBB
RjdBMEIgLyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2FzbVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFE
QzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODg0LDYgKzc4
ODgsOCBAQAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdl
YkFzc2VtYmx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMTksNiArODIyNSw3
IEBACiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENv
bGxlY3Rpb25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25T
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjcsNiArMTAzMzQsNyBAQAogCQkJCUE1
MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3
RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1
NzA2REUxMThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OTAsNiArODkwLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cgogICAgICAgICBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXZWJBc3Nl
bWJseTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB3ZWJBc3NlbWJseVByb3RvdHlwZSkpOwog
ICAgICAgICBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0
dXJlLnNldCh2bSwgdGhpcywgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fd2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3Jl
YXRlKHZtLCB0aGlzLCBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
IldlYkFzc2VtYmx5IiksIHdlYkFzc2VtYmx5LCBEb250RW51bSk7CiAKQEAgLTEyNzAsNiArMTI3
MSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5U3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNU
UlVDVE9SX1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBw
dWJsaWM6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVN0cnVjdHVy
ZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5j
dGlvblN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNU
UlVDVE9SX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKIApAQCAtNjEyLDYgKzYxMyw3IEBAIHB1YmxpYzoKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0K
KyAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsg
fQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlz
aW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVl
Pio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7CiAgICAg
fQogCisgICAgdm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJ
bmRleCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEluZGV4IDwgbV93YXNt
RXhpdFN0dWJzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX3dhc21FeGl0U3R1YnNbaW1wb3J0
SW5kZXhdLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIEJhZzxDYWxsTGlua0luZm8+JiYsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmLCBX
YXNtOjpNZW1vcnk6Ok1vZGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM5LDg1
ICsxMDM5LDE2MiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAK
IHN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIENvbXBpbGF0aW9uQ29u
dGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24s
IGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bykKIHsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQu
anNFbnRyeXBvaW50SklUOwogCi0gICAgT3JpZ2luIG9yaWdpbjsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKIAotICAgIGpzY0NhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUlu
UHJvbG9ndWUoJmZ1bmN0aW9uLmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBwcm9jLCBvcmln
aW4sIGJsb2NrKTsKKyAgICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorICAgIGppdC5zdG9y
ZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogbGlua2VkQ2FsbGVlTW92ZSA9
ICZmdW5jdGlvbi5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICpsaW5rZWRDYWxsZWVN
b3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGNhbGxlZU1vdmVMb2NhdGlvbik7CisgICAgfSk7
CisKKyAgICBSZWdpc3RlclNldCB0b1NhdmU7CisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICB0b1NhdmUuc2V0
KHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXIpOworICAgIGZvciAoY29uc3QgUGlubmVkU2l6
ZVJlZ2lzdGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKKyAgICAg
ICAgdG9TYXZlLnNldChyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisKKyAgICB1bnNpZ25lZCB0b1Nh
dmVTaXplID0gdG9TYXZlLm51bWJlck9mU2V0R1BScygpOworICAgIHRvU2F2ZS5maWx0ZXIoUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgLy8gVGhleSBzaG91bGQgYWxs
IGJlIGNhbGxlZSBzYXZlcy4KKyAgICBSRUxFQVNFX0FTU0VSVCh0b1NhdmUubnVtYmVyT2ZTZXRH
UFJzKCkgPT0gdG9TYXZlU2l6ZSk7CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3Rl
cnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpG
cmFtZVBvaW50ZXJCYXNlZCk7CisgICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOworCisgICAgdW5zaWduZWQgdG90YWxG
cmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CisgICAg
dG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRl
cygpOworICAgIHRvdGFsRnJhbWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAg
ICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1bnNpZ25lZCBudW1GUFJzID0gMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7IGkrKykg
eworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpIHsKKyAgICAgICAgY2Fz
ZSBXYXNtOjpJNjQ6CisgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgaWYgKG51
bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAg
KytudW1HUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6RjMyOgor
ICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90
YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtRlBSczsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3Vy
IEpTIHdyYXBwZXIgdGhhdCBoYW5kbGVzIGNhbGxzIHRvIHVzLgotICAgICAgICAvLyBKdXN0IHBy
ZXZlbnQgYWdhaW5zdCBjcmF6eSB3aGVuIEFTU0VSVCBpcyBlbmFibGVkLgotICAgICAgICBWYWx1
ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpG
cmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291
bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIFZhbHVl
KiBhcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9h
ZCwgSW50MzIsIG9yaWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZlNldE9mQXJndW1lbnRDb3VudCkpOwor
ICAgIHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOworICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgVmFsdWUqIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9
IGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBvcmlnaW4sIHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpKTsKKyAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVn
YXJkbGVzcyBvZiBoYXZpbmcgYSBtZW1vcnkgb3Igbm90LgorICAgIC8vIFRoZSByZWFzb24gaXMg
dGhhdCB3ZSB1c2Ugb25lIG9mIHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAorICAgIC8v
IGFsbW9zdCBhbGwgcmVhbCB3YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJl
YWxseQorICAgIC8vIHdvcnRoIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24n
dC4KKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0
ZXJzVG9TcGlsbCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3By
KCk7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAg
ICAgICAgaml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpKTsKKyAgICB9CiAKLSAgICAgICAgQ2hlY2tWYWx1ZSog
YXJndW1lbnRDb3VudENoZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBD
aGVjaywgb3JpZ2luLAotICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7Cisg
ICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAg
bnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdyZSBnb2lu
ZyB0byBzZXQgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzIGFmdGVyIHRoaXMuCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKworICAgICAgICBw
dHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzaXplb2Yo
dm9pZCopOworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2FzZSBXYXNt
OjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgICAgICAgICBpZiAo
bnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50KGkpID09IFdhc206Okkz
MikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJh
bWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50
KGkpID09IFdhc206OkkzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNl
dCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdhc21PZmZz
ZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgIGFyZ3VtZW50Q291bnRDaGVjay0+c2V0
R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgfSk7Cisg
ICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgLy8gRklYTUUgVGhlIGluc3RhbmNlIGlzIGN1cnJlbnRseSBzZXQgYnkgdGhlIEMrKyBj
b2RlIGluIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwuIFdlIHNob3VsZG4ndCBnbyB0aHJvdWdo
IHRoZSBleHRyYSBDKysgaG9vcC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjQ4NgotICAgIFZhbHVlKiBpbnN0YW5jZSA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAotICAgICAgICBibG9j
ay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9wSlNXZWJB
c3NlbWJseUluc3RhbmNlKSk7Ci0gICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUodm0s
IGluZm8ubWVtb3J5LCBpbnN0YW5jZSwgcHJvYywgYmxvY2spOwotCi0gICAgLy8gR2V0IG91ciBh
cmd1bWVudHMuCi0gICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOwotICAgIGpzY0NhbGxpbmdD
b252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIHByb2MsIGJsb2NrLCBvcmlnaW4s
IFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3VtZW50cyBpbnRv
IHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1
cENhbGwocHJvYywgYmxvY2ssIG9yaWdpbiwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWduYXR1cmUt
PnJldHVyblR5cGUoKSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAg
ICAgIENvbXBpbGF0aW9uQ29udGV4dCogY29udGV4dCA9ICZjb21waWxhdGlvbkNvbnRleHQ7Ci0K
LSAgICAgICAgLy8gd2FzbSAtPiB3YXNtIGNhbGxzIGNsb2JiZXIgcGlubmVkIHJlZ2lzdGVycyB1
bmNvbmRpdGlvbmFsbHkuIFRoaXMgSlMgLT4gd2FzbSB0cmFuc2l0aW9uIG11c3QgdGhlcmVmb3Jl
IHJlc3RvcmUgdGhlc2UgcGlubmVkIHJlZ2lzdGVycyAod2hpY2ggYXJlIHVzdWFsbHkgY2FsbGVl
LXNhdmVkKSB0byBhY2NvdW50IGZvciB0aGlzLgotICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAgICAgICAg
UmVnaXN0ZXJTZXQgY2xvYmJlcnM7Ci0gICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5i
YXNlTWVtb3J5UG9pbnRlcik7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+
c2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rl
cik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKLSAg
ICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisgICAgaWYgKCEhaW5mby5tZW1v
cnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQ
b2ludGVyOworICAgICAgICBqaXQubG9hZFB0cigmdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNl
LCBiYXNlTWVtb3J5KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOworICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyczsKKyAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAg
ICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2Rl
IGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJl
Z2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgfQogCi0gICAgICAgIHBh
dGNocG9pbnQtPnNldEdlbmVyYXRvcihbY29udGV4dF0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgIGNvbXBpbGF0aW9u
Q29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCA9IGppdC5jYWxsKCk7CiAK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gY2FsbDsK
LSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBy
ZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJl
Z0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9m
ZnNldCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQogCi0gICAgLy8gUmV0
dXJuIHRoZSByZXN1bHQsIGlmIG5lZWRlZC4KICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+cmV0dXJu
VHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpWb2lkOgotICAgICAgICBibG9jay0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIG9yaWdpbik7Ci0gICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsK
ICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgcmVzdWx0ID0gYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIG9yaWdpbiwgcmVzdWx0KTsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgY2FzZSBXYXNtOjpJNjQ6Ci0gICAgICAg
IGJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQjM6OlJldHVybiwgb3JpZ2luLCBy
ZXN1bHQpOworICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXYXNtOjpGdW5jOgotICAgIGNhc2UgV2FzbTo6
QW55ZnVuYzoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAK
LSAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYyk7Ci0gICAgQjM6OmdlbmVyYXRlKHBy
b2MsICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50SklUKTsKLSAgICBjb21waWxhdGlv
bkNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2MucmVsZWFzZUJ5cHJvZHVjdHMo
KTsKLSAgICBmdW5jdGlvbi5qc1RvV2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IHByb2MuY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgIGppdC5yZXQoKTsKIH0KIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21J
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25T
dGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRl
eD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCB1bnNp
Z25lZCBvcHRMZXZlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtODQsNiArODQsNyBAQCBwcml2YXRlOgogICAgIH0KIAogcHVibGljOgorICAgIHN0YXRpYyB1
bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KICAgICB2
b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciogY2FsbGVl
TW92ZUxvY2F0aW9uLCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6
OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldl
IHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIx
MzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1i
bHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw2ICs3MywzNSBAQCBBTFdBWVNfSU5MSU5FIHVpbnQ4
X3QqIGdldFdhc21CdWZmZXJGcm9tCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmlldyA/IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitBTFdBWVNfSU5M
SU5FIGJvb2wgaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUs
IFdlYkFzc2VtYmx5RnVuY3Rpb24qJiB3YXNtRnVuY3Rpb24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiYgd2FzbVdyYXBwZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNXZWJBc3NlbWJseUhvc3RG
dW5jdGlvbih2bSwganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLCB3YXNtRnVuY3Rpb24sIHdhc21X
cmFwcGVyRnVuY3Rpb24pOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJBc3NlbWJseUhv
c3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24q
JiB3YXNtRnVuY3Rpb24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiYgd2FzbVdyYXBwZXJG
dW5jdGlvbikKK3sKKyAgICBpZiAob2JqZWN0LT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6aW5mbygpKSkgeworICAgICAgICB3YXNtRnVuY3Rpb24gPSBqc0Nhc3Q8V2ViQXNzZW1i
bHlGdW5jdGlvbio+KG9iamVjdCk7CisgICAgICAgIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxs
cHRyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpKSB7CisgICAgICAgIHdh
c21XcmFwcGVyRnVuY3Rpb24gPSBqc0Nhc3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihv
YmplY3QpOworICAgICAgICB3YXNtRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdW51c2VkOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiB1bnVzZWQyOworICAgIHJldHVybiBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBvYmplY3QsIHVudXNlZCwgdW51c2VkMik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lv
biAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3QKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
ICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBt
ZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9m
KFdyaXRlQmFycmllcjxKU0NlbGw+KSk7CisgICAgbWVtc2V0KGltcG9ydEZ1bmN0aW9ucygpLCAw
LCBtX251bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSk7
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMTM2NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsMTggKzYwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLmdldCgpOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBp
bXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Piog
aW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOwogICAgICAgICByZXR1cm4gJmltcG9ydEZ1
bmN0aW9ucygpW2lkeF07CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4qIGltcG9y
dEZ1bmN0aW9ucygpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25z
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNDZWxsKiB2YWx1
ZSwgdW5zaWduZWQgaWR4KQorICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBKU09i
amVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIGltcG9ydEZ1bmN0aW9u
KGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNp
b24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDExIEBAIEpTV2ViQXNzZW1i
bHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFYKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
d29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29t
bWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0
LgogICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+Ojpt
YWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxX
ZWJBc3NlbWJseUZ1bmN0aW9uPj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2Vt
Ymx5RnVuY3Rpb24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7CisgICAgbV9qc0Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7CiAgICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CiAgICAg
ICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpT
aWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBj
b2RlLgotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8
V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KIH0KIApAQCAtMTA2LDExICsx
MDYsMTEgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgbgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwotICAgIG1f
anNGdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMu
cmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG5ld1NpemUpKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkgewogICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbigpOwotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KICAgICBt
X3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJv
b2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG4KIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKICAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiB9CkBAIC0x
MzEsNiArMTMxLDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYK
ICAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1
bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQoKSk7CiB9
CiAKK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90
IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCksIGZ1
bmN0aW9uLT53YXNtRW50cnlwb2ludCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjEzNjU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNs
dWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKQEAgLTUwLDEzICs1MSwxNCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11
bTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQorICAgIEpTT2JqZWN0
KiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdLmdldCgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpOwogICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1i
bHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwg
bV9zaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0K
QEAgLTc0LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVG
dW5jdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3Nl
bWJseUZ1bmN0aW9uPj4gbV9qc0Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVy
PEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
X21heGltdW07CiAgICAgdWludDMyX3QgbV9zaXplOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCkBAIC0xMjksMTUgKzEzMCwyMyBAQCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuCiAgICAgICAgICAgICBpZiAo
IXZhbHVlLmlzRnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpOwogCi0gICAgICAgICAgICBKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU09iamVjdCo+KHZhbHVlKTsKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4
cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAgICAgICAgICBpZiAoV2ViQXNzZW1i
bHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnQgPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdh
c21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNt
V3JhcHBlckZ1bmN0aW9uOworICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24odm0sIG9iamVjdCwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAg
ICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0
aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSBp
bXBvcnRlZEV4cG9ydC0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgICAgIGlm
ICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5k
ZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3Jh
cHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAvLyBi
LiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgorICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJl
SW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
aW1wb3J0LmtpbmRJbmRleF07CiAgICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkU2lnbmF0dXJl
SW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJ
SUxpdGVyYWwoImltcG9ydGVkIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhl
IHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIikpKTsKLSAgICAgICAg
ICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CiAgICAgICAgICAgICAvLyBhLiBMZXQg
Y2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hp
Y2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlw
dCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnks
IGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCkBAIC0xNDYsNyArMTU1LDcgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBXZWJBc3NlbWJseUluc3RhbgogICAgICAgICAgICAgLy8g
Tm90ZTogYWRkaW5nIHRoZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xv
c3VyZSByZXF1aXJlbWVudHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwg
YmUga2VwdCBhbGl2ZSkgYW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAKICAgICAgICAg
ICAgIEFTU0VSVChudW1JbXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0gICAg
ICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0sIGNlbGwsIG51bUltcG9ydEZ1
bmN0aW9ucysrKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRJbXBvcnRGdW5jdGlvbih2bSwg
b2JqZWN0LCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7CiAgICAgICAgICAgICAvLyB2LiBBcHBlbmQg
Y2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC0xMTAsMTkgKzExMSwyNiBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAvLyAgIGkuIElmIHRo
ZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgZnVuYyBpbiBmdW5jcyB3
aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVybiBmdW5jLgogICAgICAg
ICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3Ig
YW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBs
ZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBp
bXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Qs
IHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1w
b3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJl
IGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbkltcG9y
dENvdW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IHJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1
MTAKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4OworICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBvcnRGdW5j
dGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNz
ZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKKyAgICAgICAgICAgICAgICAg
ICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbkltcG9ydCwg
ZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAgIGlpaS4gT3Ro
ZXJ3aXNlOgorICAgICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRl
ZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgorICAgICAgICAgICAgICAg
IC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KKyAgICAgICAgICAgICAgICAvLyAgICAg
Yy4gUmV0dXJuIGZ1bmMuCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVs
ZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0g
ZnVuY3Rpb247CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAgIGlpaS4gT3RoZXJ3aXNl
OgotICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9u
IEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCi0gICAgICAgICAgICAvLyAgICAgYi4gQXBw
ZW5kIGZ1bmMgdG8gZnVuY3MuCi0gICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2Rl
QmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJ
bmRleCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUlu
ZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxs
ZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKQEAgLTE4NCw3ICsxOTIs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIEFT
U0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQoc2lnbmF0
dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7CiAgICAgICAgIGlmIChzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7Ci0gICAg
ICAgICAgICBKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24o
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBz
dGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlz
LCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CkBA
IC0yNDEsMTQgKzI0OSwzMSBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFs
dWF0CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5kaWNl
c1tpXTsKKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2NrLT5m
dW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmRlY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9yKHN0
YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZh
bHVlIHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FLiIp
KSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGpzQ2Fz
dDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpLT5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0
aW9uSW1wb3J0LCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHdhc21GdW5jdGlvbiB8fCB3YXNtV3JhcHBlckZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRh
YmxlSW5kZXgsIHdhc21GdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0s
IHRhYmxlSW5kZXgsIHdhc21XcmFwcGVyRnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsrdGFibGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUo
dm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25J
bmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAr
K3RhYmxlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAg
Y29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAu
CiAgICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUg
YW4gRWxlbWVudCB3LyBpbmRleCAwLgpAQCAtMjg4LDcgKzMxMyw3IEBAIEpTVmFsdWUgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChK
U0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKKyAgICBpZiAo
SlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpn
ZXRDYWxsRGF0YShzdGFydEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGNhbGwoc3RhdGUs
IHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgc3RhdGUt
PmVtcHR5TGlzdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjEzNjU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0gICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9zdGFydEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zdGFy
dEZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3
ICsxMDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHJl
c3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAgaWYgKEpTT2JqZWN0KiByZXN1
bHQgPSB0YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiB9
CkBAIC0xMjAsOCArMTIwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3Nl
bWJseQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rp
b24qPih2bSwgdmFsdWUpOwotICAgIGlmICghdmFsdWUuaXNOdWxsKCkgJiYgIWZ1bmN0aW9uKSB7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uOworICAgIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgIGlmICghdmFsdWUuaXNO
dWxsKCkgJiYgIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNtRnVuY3Rp
b24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNlY29uZCBh
cmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1bmN0aW9u
IikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEzOSw4ICsxNDAsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIGlmICh2YWx1ZS5pc051bGwoKSkK
ICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQoISFmdW5jdGlvbik7Ci0gICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5k
ZXgsIGZ1bmN0aW9uKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkgJiYgaXNXZWJB
c3NlbWJseUhvc3RGdW5jdGlvbih2bSwganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLCB3YXNtRnVu
Y3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKTsKKyAgICAgICAgQVNTRVJUKCEhd2FzbUZ1bmN0
aW9uIHx8ICEhd2FzbVdyYXBwZXJGdW5jdGlvbik7CisgICAgICAgIGlmICh3YXNtRnVuY3Rpb24p
CisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCB3YXNtRnVuY3Rpb24p
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4
LCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Q
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnNfaW5mbyA9IHsg
IldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgfTsKKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbio+KHZtLCBleGVjLT5qc0NhbGxlZSgpKTsKKyAgICBpZiAoIXdhc21GdW5jdGlv
bikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5IGZ1bmN0
aW9uIikpKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIEpTT2JqZWN0KiBmdW5jdGlv
biA9IHdhc21GdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1
bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworICAgIHNj
b3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChleGVjKSkp
OworfQorCitXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21F
bnRyeXBvaW50Q29kZSkKKyAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQor
ICAgICwgbV93YXNtRW50cnlwb2ludENvZGUod2FzbUVudHJ5cG9pbnRDb2RlKQorICAgICwgbV9z
aWduYXR1cmVJbmRleChzaWduYXR1cmVJbmRleCkKK3sgfQorCitXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1w
b3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVu
Y3Rpb24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwg
IldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CisgICAg
U3RyaW5nIG5hbWUgPSAiIjsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0u
Z2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5z
aWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKKyAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxvY2stPndh
c21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZt
LCBzaWduYXR1cmVJbmRleCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0
YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBjb2RlQmxv
Y2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlv
biwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOworICAgIFJFTEVBU0VfQVNT
RVJUKEpTVmFsdWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24oKSk7CisgICAgbV9mdW5jdGlvbi5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMsIGNvZGVC
bG9jayk7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2NvZGVCbG9jayk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5j
dGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSlNGdW5j
dGlvbiBCYXNlOworCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayos
IFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZUluZGV4
OyB9CisgICAgdm9pZCogd2FzbUVudHJ5cG9pbnQoKSB7IHJldHVybiBtX3dhc21FbnRyeXBvaW50
Q29kZTsgfQorICAgIEpTT2JqZWN0KiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0
KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVF
eGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0
KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpT
aWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9pbnRDb2RlKTsKKworICAgIC8vIFdlIGtl
ZXAgYSByZWZlcmVuY2UgdG8gb3VyIENvZGVCbG9jayBiZWNhdXNlIHdlIGhhdmUgYSByYXcKKyAg
ICAvLyBwb2ludGVyIHRvIGFzbSBjb2RlIHRoYXQgaXQgb3ducy4KKyAgICBXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX2Z1bmN0aW9uOworICAgIHZvaWQqIG1fd2FzbUVudHJ5cG9pbnRDb2RlOworICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304023</attachid>
            <date>2017-03-09 19:39:06 -0800</date>
            <delta_ts>2017-03-10 14:02:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>61934</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM2OTgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAzLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIG1vcmUgZGVtb3MgcnVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd2FzbS9CdWlsZGVyLmpzOgorICAgICAgICAoZXhwb3J0LmRl
ZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzLmNvbnN0LnNl
Y3Rpb24uaW4uV0FTTS5kZXNjcmlwdGlvbi5zZWN0aW9uLnN3aXRjaC5zZWN0aW9uLmNhc2Uuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS93
cmFwcGVyLWZ1bmN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cG9ydEltcG9ydCk6CisgICAg
ICAgIChyZXR1cm4ubmV3LldlYkFzc2VtYmx5Lk1vZHVsZSk6CisgICAgICAgIChhc3NlcnQudGhy
b3dzLm1ha2VJbnN0YW5jZSk6CisgICAgICAgIChhc3NlcnQudGhyb3dzLkJhcik6CisgICAgICAg
IChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wMy0wOSAgQ2FpbyBMaW1hICA8dGljYWlvbGltYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTbmV4dF0gSW1wbGVtZW50IE9iamVjdCBSZXN0IC0gSW1w
bGVtZW50aW5nIE9iamVjdCBSZXN0IERlc3RydWN0dXJpbmcKSW5kZXg6IEpTVGVzdHMvd2FzbS9C
dWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCShyZXZpc2lv
biAyMTM2NTQpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
NTc5LDcgKzU3OSwxMCBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAiRWxlbWVudCI6Ci0gICAgICAgICAg
ICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRoaXNb
c2VjdGlvbl0gPSBmdW5jdGlvbiguLi5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
cmdzLmxlbmd0aCAhPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiWW91J3JlIGRvaW5nIGl0IHdyb25nLiBUaGlzIGVsZW1lbnQgZG9lcyBub3QgdGFrZSBhcmd1
bWVudHMuIFlvdSBtdXN0IGNoYWluIHRoZSBjYWxsIHdpdGggYW5vdGhlciBFbGVtZW50KCkiKTsK
KwogICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEJ1aWxkZXIgPSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCkluZGV4OiBKU1Rlc3RzL3dhc20vanMt
YXBpL3dyYXBwZXItZnVuY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFw
aS93cmFwcGVyLWZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2FzbS9qcy1h
cGkvd3JhcHBlci1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworCitmdW5jdGlvbiBleHBvcnRJbXBvcnQodHlwZSkgewor
ICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmIiwgdHlw
ZSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmdW5jIiwge21vZHVsZTogImltcCIsIGZp
ZWxkOiAiZiJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKS5FbmQoKTsKKyAgICBy
ZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkp
OworfQorCit7CisgICAgbGV0IHR5cGUgPSB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9
OworICAgIGxldCBtb2R1bGUgPSBleHBvcnRJbXBvcnQodHlwZSk7CisgICAgbGV0IGNhbGxlZCA9
IGZhbHNlOworICAgIGxldCBmb28gPSAoaSkgPT4geworICAgICAgICBjYWxsZWQgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gaSArIDQyOworICAgIH07CisgICAgbGV0IGluc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Y6IGZvb319KTsKKyAgICBhc3NlcnQu
dHJ1dGh5KGluc3RhbmNlLmV4cG9ydHMuZnVuYyAhPT0gZm9vKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIGxldCByMSA9IGluc3RhbmNlLmV4cG9ydHMuZnVu
YyhpKTsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBm
YWxzZTsKKyAgICAgICAgbGV0IHIyID0gZm9vKGkpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsK
KyAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgfQorCisgICAgeworICAgICAgICBsZXQg
YnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZiIs
IHtwYXJhbXM6IFtdfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCkuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkuRW5kKCk7CisgICAgICAgIGxldCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7Cisg
ICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCB0eXBlIGNoZWNrLgorICAgICAgICBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmOiBpbnN0
YW5jZS5leHBvcnRzLmZ1bmN9fSksIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwgImltcG9ydGVkIGZ1
bmN0aW9uJ3Mgc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5
IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIik7CisgICAgfQorCit9CisKK3sKKyAgICBjb25zdCB0YWJs
ZURlc2NyaXB0aW9uID0ge2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMn07CisgICAgZnVu
Y3Rpb24gbWFrZUluc3RhbmNlKHR5cGUsIGltcCkgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgICAgIC5GdW5j
KFsiaTMyIl0sICJpMzIiKQorICAgICAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAi
aTMyIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkltcG9ydCgpCisgICAgICAg
ICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgICAg
ICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYxIiwge3BhcmFtczogWyJpMzIiXSwgcmV0OiJp
MzIifSkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmMiIsIHtwYXJhbXM6IFsi
aTMyIiwgImkzMiJdLCByZXQ6ImkzMiJ9KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRWxl
bWVudCgpCisgICAgICAgICAgICAgICAgLkVsZW1lbnQoe29mZnNldDogMCwgZnVuY3Rpb25JbmRp
Y2VzOiBbMCwgMV19KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisg
ICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAxKQorICAgICAgICAgICAgICAgICAgICAu
R2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVj
dCgwLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzInXSA9PiAnaTMyJworICAg
ICAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5FbmQoKTsKKyAgICAgICAgbGV0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGltcCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gQmFy
KCl7fTsKKyAgICBub0lubGluZShCYXIpOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBs
ZXQgZm9vID0gKGkpID0+IHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgbmV3IEJh
cjsKKyAgICAgICAgcmV0dXJuIGkqNDI7CisgICAgfQorICAgIGxldCB0YWJsZSA9IG5ldyBXZWJB
c3NlbWJseS5UYWJsZSh0YWJsZURlc2NyaXB0aW9uKTsKKyAgICBsZXQgaW5zdCA9IG1ha2VJbnN0
YW5jZSh7cGFyYW1zOlsnaTMyJ10sIHJldDoiaTMyIn0sIHtpbXA6IHtmMTogZm9vLCBmMjpmb28s
IHRhYmxlfX0pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAg
IGxldCByMSA9IGluc3QuZXhwb3J0cy5mb28oMCwgaSk7CisgICAgICAgIGFzc2VydC50cnV0aHko
Y2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgIGxldCByMiA9IGZvbyhp
KTsKKyAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKyAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdC5leHBv
cnRzLmZvbygxLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiY2FsbF9pbmRpcmVjdCB0
byBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IG1hdGNoIik7CisgICAgICAgIGFzc2VydC50cnV0
aHkoIWNhbGxlZCk7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7
CisgICAgICAgIGxldCByMSA9IHRhYmxlLmdldCgwKShpKTsKKyAgICAgICAgdGFibGUuc2V0KDAs
IHRhYmxlLmdldCgwKSk7IC8vIGp1c3QgbWFrZSBzdXJlIHNldHRpbmcgYSB3cmFwcGVyIGZ1bmN0
aW9uIHdvcmtzLgorICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgIGNhbGxl
ZCA9IGZhbHNlOworICAgICAgICBsZXQgcjIgPSB0YWJsZS5nZXQoMSkoaSk7CisgICAgICAgIGFz
c2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgIGFz
c2VydC5lcShyMSwgcjIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IG5leHRJbnN0ID0g
bWFrZUluc3RhbmNlKHtwYXJhbXM6WydpMzInXSwgcmV0OiJpMzIifSwge2ltcDoge2YxOiB0YWJs
ZS5nZXQoMCksIGYyOmluc3QuZXhwb3J0cy5mb28sIHRhYmxlfX0pOworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICAgICAgbGV0IHIxID0gbmV4dEluc3Qu
ZXhwb3J0cy5mb28oMCwgaSk7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7Cisg
ICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCByMiA9IGZvbyhpKTsK
KyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgICAgIGNhbGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICAgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBuZXh0SW5zdC5leHBvcnRzLmZvbygxLCBpKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCAiY2FsbF9pbmRpcmVjdCB0byBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IG1h
dGNoIik7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KCFjYWxsZWQpOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGxl
dCByMSA9IHRhYmxlLmdldCgxKSgwLCBpKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoY2Fs
bGVkKTsKKyAgICAgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IHIyID0g
Zm9vKGkpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICAgICAg
Y2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBhc3NlcnQuZXEocjEsIHIyKTsKKyAgICAgICAg
fQorICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzNjU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDgwIEBACisyMDE3LTAzLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIG1vcmUgZGVtb3MgcnVuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI5NzYwMzEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgYW5vdGhlciBXYXNtIGRlbW8gcnVuOgor
ICAgICAgICBodHRwczovL2tyaXBrZW4uZ2l0aHViLmlvL0JhbmFuYUJyZWFkL2N1YmUyL2JiLmh0
bWwKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdHdvIGJ1Z3M6CisgICAgICAg
IDEuIFdoZW4gV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUgd2FzIGFkZGVkLCB3ZSBkaWQgbm90IHBy
b3Blcmx5CisgICAgICAgIHVwZGF0ZSB0aGUgbGFzdCBKUyB0eXBlIHZhbHVlLgorICAgICAgICAy
LiBPdXIgY29kZSBmb3Igb3VyIEpTIC0+IFdhc20gZW50cnlwb2ludCB3YXMgd3JvbmcuIEl0IGxl
YWQgdG8gYmFkCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbiB3aGVyZSB3ZSB3b3VsZCBlbWl0IEIz
IHRoYXQgd291bGQgd3JpdGUgb3ZlciByMTIKKyAgICAgICAgYW5kIHJieCAob24geDg2KSB3aGlj
aCBpcyBpbnZhbGlkIHNpbmNlIHRob3NlIGFyZSBvdXIgcGlubmVkIHJlZ2lzdGVycy4KKyAgICAg
ICAgVGhpcyBwYXRjaCBqdXN0IHJld3JpdGVzIHRoZSBlbnRyeXBvaW50IHRvIHVzZSBoYW5kIHdy
aXR0ZW4gYXNzZW1ibGVyCisgICAgICAgIGNvZGUuIEkgd2FzIHBsYW5uaW5nIG9uIGRvaW5nIHRo
aXMgYW55d2F5cyBiZWNhdXNlIGl0J3MgYSBjb21waWxlCisgICAgICAgIHRpbWUgc3BlZWQgYm9v
c3QuCisgICAgICAgIAorICAgICAgICBBbHNvLCB0aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Ig
c29tZSBuZXcgQVBJIGZlYXR1cmVzOgorICAgICAgICBXZSBjYW4gbm93IGV4cG9ydCBhbiBpbXBv
cnQsIGVpdGhlciB2aWEgYSBkaXJlY3QgZXhwb3J0LCBvciB2aWEgYSBUYWJsZSBhbmQgdGhlCisg
ICAgICAgIEVsZW1lbnQgc2VjdGlvbi4gSSd2ZSBhZGRlZCBhIG5ldyBjbGFzcyBjYWxsZWQgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gdGhhdAorICAgICAgICBqdXN0IHdyYXBzIG92ZXIgYSBK
U09iamVjdCB0aGF0IGlzIGEgZnVuY3Rpb24uIFdyYXBwZXIgZnVuY3Rpb25zIGhhdmUgdHlwZXMK
KyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0sIHNvIGlmIHRoZXkncmUgcmUtaW1wb3J0ZWQs
IG9yIGNhbGxlZCB2aWEgY2FsbF9pbmRpcmVjdCwKKyAgICAgICAgdGhleSBjYW4gYmUgdHlwZSBj
aGVja2VkLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6Ondhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIp
OgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6
Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcyk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjppc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmltcG9ydEZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjppbXBvcnRGdW5jdGlvbnMpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldEltcG9ydEZ1bmN0aW9uKToKKyAg
ICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseVRhYmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxl
OjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzZXRG
dW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbik6CisgICAgICAgICogd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpj
YWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6ZnVuY3Rpb24pOgorCiAy
MDE3LTAzLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YkFzc2VtYmx5OiBNYWtlIHRoZSBVbml0eSBBbmdyeUJvdHMgZGVtbyBydW4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJCNzE5QTI4
OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIz
ODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVFMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEzNzRC
QzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYxRDVDRTk1
MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAg
Ki87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0
RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zNzczLDYgKzM3NzUsOCBAQAogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVu
dGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4
NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2
IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0Mg
LyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNt
UGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2Fz
bVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVBsYW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUw
MEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODg0LDYgKzc4ODgsOCBAQAogCQkJ
CUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmgg
Ki8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9KU0NhbGxl
ZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGpzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMTksNiArODIyNSw3IEBACiAJCQkJMEYy
MUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29w
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5ODE4NTZB
NDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovLApAQCAtMTAzMjcsNiArMTAzMzQsNyBAQAogCQkJCUE1MDNGQTE5MTg4RTBG
QjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBE
IC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1NzA2REUxMThBMkJD
RjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
RTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNiArODkw
LDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAgICAgICBt
X3dlYkFzc2VtYmx5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXZWJBc3NlbWJseTo6Y3JlYXRl
U3RydWN0dXJlKHZtLCB0aGlzLCB3ZWJBc3NlbWJseVByb3RvdHlwZSkpOwogICAgICAgICBtX3dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKTsKICAgICAgICAgbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwg
dGhpcywgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fd2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAg
ICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRlKHZtLCB0aGlz
LCBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIldlYkFzc2VtYmx5
IiksIHdlYkFzc2VtYmx5LCBEb250RW51bSk7CiAKQEAgLTEyNzAsNiArMTI3MSw3IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b25TdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUo
VklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBwdWJsaWM6CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVy
ZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uU3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUo
REVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKIApAQCAtNjEyLDYgKzYxMyw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1
cmUqIHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVt
b3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBlbnVtIEpT
VHlwZSA6IHVpbnQ4X3QgewogCiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsCiAKLSAgICBM
YXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IFdl
YkFzc2VtYmx5RnVuY3Rpb25UeXBlLAogICAgIE1heEpTVHlwZSA9IDBiMTExMTExMTEsCiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8
SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0
T2ZDYWxsZWVzKCkpOwogICAgIH0KIAorICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBv
cnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bXBvcnRJbmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOworICAgICAgICByZXR1cm4gbV93
YXNtRXhpdFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYs
IEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6
V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3Vu
dCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMzY1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzOSw4NSArMTAzOSwxNjMgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1w
KGNvbnN0IFZlY3RvcjxDbwogCiBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0m
IHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUludGVybmFs
RnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8pCiB7Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAgQmFzaWNC
bG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAq
Y29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIAotICAgIE9yaWdpbiBvcmlnaW47
CisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKLSAgICBqc2NDYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZmdW5jdGlvbi5qc1RvV2FzbUNhbGxlZU1vdmVM
b2NhdGlvbiwgcHJvYywgb3JpZ2luLCBibG9jayk7CisgICAgLy8gRklYTUUgU3RvcCB1c2luZyAw
IGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQu
bW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIq
IGxpbmtlZENhbGxlZU1vdmUgPSAmZnVuY3Rpb24uanNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb247
CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxsZWVNb3Zl
TG9jYXRpb24pOworICAgIH0pOworCisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlOworICAgIGNvbnN0
IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CisgICAgdG9TYXZlLnNldChwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICBm
b3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNp
emVSZWdpc3RlcnMpCisgICAgICAgIHRvU2F2ZS5zZXQocmVnSW5mby5zaXplUmVnaXN0ZXIpOwor
CisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKTsKKyAg
ICB0b1NhdmUuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAg
IC8vIFRoZXkgc2hvdWxkIGFsbCBiZSBjYWxsZWUgc2F2ZXMuCisgICAgUkVMRUFTRV9BU1NFUlQo
dG9TYXZlLm51bWJlck9mU2V0R1BScygpID09IHRvU2F2ZVNpemUpOworCisgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQpOworICAgIGZ1bmN0aW9uLmpzVG9X
YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKKwor
ICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBz
aXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlv
bjo6aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQg
bnVtRlBScyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUtPmFyZ3VtZW50
KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206OkkzMjoK
KyAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3By
QXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZv
aWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICBp
ZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBKUyB3cmFwcGVyIHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4K
LSAgICAgICAgLy8gSnVzdCBwcmV2ZW50IGFnYWluc3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5h
YmxlZC4KLSAgICAgICAgVmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwotICAgICAgICBWYWx1ZSog
b2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBvcmlnaW4sCi0gICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRP
ZkFyZ3VtZW50Q291bnQpKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKyAgICBqaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgICAgIFZhbHVlKiBleHBl
Y3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
b3JpZ2luLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgLy8gV2Ugc2F2ZSBhbGwg
dGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9yIG5vdC4KKyAg
ICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBhIHNjcmF0Y2gu
IFRoYXQgc2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFtcyB1c2UgbWVt
b3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5nIGZvciB0aGUg
Y2FzZSB0aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBy
ZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJl
Z0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRP
ZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQogCi0g
ICAgICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBvcmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3VudCwg
YXJndW1lbnRDb3VudCkpOworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAg
ICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRo
aXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBz
aW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHNpemVvZih2b2lkKik7CisgICAgICAgIHB0
cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBz
aXplb2Yodm9pZCopOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUt
PmFyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6STY0OgorICAgICAgICAgICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxs
aW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2Fz
bU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21P
ZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNt
T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6STMyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAg
ICAgICAgICAgICBpZiAobnVtRlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFy
Z3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50
KGkpID09IFdhc206OkYzMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3Jh
dGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2NyYXRj
aFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9pZCop
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUtPmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1G
UFJzXS5mcHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFy
Z3NbbnVtRlBSc10uZnByKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAr
K251bUZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgYXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAg
ICAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhNRSBUaGUg
aW5zdGFuY2UgaXMgY3VycmVudGx5IHNldCBieSB0aGUgQysrIGNvZGUgaW4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y2FsbC4gV2Ugc2hvdWxkbid0IGdvIHRocm91Z2ggdGhlIGV4dHJhIEMrKyBob29w
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDg2Ci0gICAgVmFs
dWUqIGluc3RhbmNlID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsK
LSAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSh2bSwgaW5mby5tZW1vcnksIGluc3Rh
bmNlLCBwcm9jLCBibG9jayk7Ci0KLSAgICAvLyBHZXQgb3VyIGFyZ3VtZW50cy4KLSAgICBWZWN0
b3I8VmFsdWUqPiBhcmd1bWVudHM7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5sb2FkQXJn
dW1lbnRzKHNpZ25hdHVyZSwgcHJvYywgYmxvY2ssIG9yaWdpbiwgWyZdIChWYWx1ZSogYXJndW1l
bnQsIHVuc2lnbmVkKSB7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwotICAg
IH0pOwotCi0gICAgLy8gTW92ZSB0aGUgYXJndW1lbnRzIGludG8gcGxhY2UuCi0gICAgVmFsdWUq
IHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywg
b3JpZ2luLCBhcmd1bWVudHMsIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSwgWyZd
IChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKLSAgICAgICAgQ29tcGlsYXRpb25Db250
ZXh0KiBjb250ZXh0ID0gJmNvbXBpbGF0aW9uQ29udGV4dDsKLQotICAgICAgICAvLyB3YXNtIC0+
IHdhc20gY2FsbHMgY2xvYmJlciBwaW5uZWQgcmVnaXN0ZXJzIHVuY29uZGl0aW9uYWxseS4gVGhp
cyBKUyAtPiB3YXNtIHRyYW5zaXRpb24gbXVzdCB0aGVyZWZvcmUgcmVzdG9yZSB0aGVzZSBwaW5u
ZWQgcmVnaXN0ZXJzICh3aGljaCBhcmUgdXN1YWxseSBjYWxsZWUtc2F2ZWQpIHRvIGFjY291bnQg
Zm9yIHRoaXMuCi0gICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9
ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVy
czsKLSAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsK
LSAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzKQotICAg
ICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwotICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKGNsb2JiZXJzKTsKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJS
ZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIGpp
dC5sb2FkUHRyKCZ2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIGJhc2VNZW1vcnkpOworICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAg
IGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICBBU1NFUlQoIXNpemVSZWdz
WzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBh
dCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRv
IDAuCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9y
eSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6
ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3Nb
aV0uc2l6ZVJlZ2lzdGVyKTsKKyAgICB9CiAKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFtjb250ZXh0XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2lu
dFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gaml0LmNhbGwoKTsKIAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgY29udGV4dC0+anNF
bnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwgPSBjYWxsOwotICAgICAgICB9KTsKLSAgICB9
KTsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0
ZXJzVG9TcGlsbCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3By
KCk7CisgICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0KSwgcmVnKTsKKyAgICB9CiAKLSAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCwgaWYg
bmVlZGVkLgogICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkpIHsKLSAgICBjYXNl
IFdhc206OlZvaWQ6Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
QjM6OlJldHVybiwgb3JpZ2luKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtOjpGMzI6
CisgICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6RjY0
OgotICAgICAgICByZXN1bHQgPSBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNl
Q2FzdCwgb3JpZ2luLCByZXN1bHQpOwotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIFdh
c206OkkzMjoKLSAgICBjYXNlIFdhc206Okk2NDoKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4sIHJlc3VsdCk7CisgICAgICAgIGpp
dC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdhc206OkZ1bmM6Ci0gICAgY2FzZSBXYXNtOjpBbnlmdW5jOgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIEIzOjpwcmVwYXJlRm9y
R2VuZXJhdGlvbihwcm9jKTsKLSAgICBCMzo6Z2VuZXJhdGUocHJvYywgKmNvbXBpbGF0aW9uQ29u
dGV4dC5qc0VudHJ5cG9pbnRKSVQpOwotICAgIGNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9p
bnRCeXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgIGZ1bmN0aW9uLmpz
VG9XYXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgp
OwogfQogCiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGls
YXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rp
b25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJl
SW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIHVuc2lnbmVkIG9wdExldmVsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHBy
aXZhdGU6CiAgICAgfQogCiBwdWJsaWM6CisgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJ
bkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQogICAgIHZvaWQgc2V0dXBGcmFtZUluUHJv
bG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyKiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQ
cm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2sp
IGNvbnN0CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUg
Zm9yIG5vdy4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTcxLDYgKzczLDM2IEBAIEFMV0FZU19JTkxJTkUgdWludDhfdCogZ2V0V2FzbUJ1ZmZlckZy
b20KICAgICByZXR1cm4gYXJyYXlCdWZmZXJWaWV3ID8gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFy
cmF5QnVmZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVm
ZmVyLT5pbXBsKCktPmRhdGEoKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgV2ViQXNzZW1ibHlGdW5j
dGlvbiomIHdhc21GdW5jdGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qJiB3YXNtV3Jh
cHBlckZ1bmN0aW9uKQoreworICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjppbmZvKCkpKSB7CisgICAgICAgIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJB
c3NlbWJseUZ1bmN0aW9uKj4ob2JqZWN0KTsKKyAgICAgICAgd2FzbVdyYXBwZXJGdW5jdGlvbiA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAob2JqZWN0LT5p
bmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8oKSkpIHsKKyAgICAg
ICAgd2FzbVdyYXBwZXJGdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bio+KG9iamVjdCk7CisgICAgICAgIHdhc21GdW5jdGlvbiA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0FMV0FZU19JTkxJTkUg
Ym9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgV2Vi
QXNzZW1ibHlGdW5jdGlvbiomIHdhc21GdW5jdGlvbiwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qJiB3YXNtV3JhcHBlckZ1bmN0aW9uKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0
aW9uKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSksIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBw
ZXJGdW5jdGlvbik7Cit9CisKKworQUxXQVlTX0lOTElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIHVudXNlZDsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdW51c2VkMjsK
KyAgICByZXR1cm4gaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgb2JqZWN0LCB1bnVzZWQs
IHVudXNlZDIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2Vi
QXNzZW1ibHlJbnN0CiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX251bUltcG9y
dEZ1bmN0aW9ucyhudW1JbXBvcnRGdW5jdGlvbnMpCiB7Ci0gICAgbWVtc2V0KGltcG9ydEZ1bmN0
aW9ucygpLCAwLCBtX251bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlND
ZWxsPikpOworICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwgMCwgbV9udW1JbXBvcnRGdW5j
dGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikpOwogfQogCiB2b2lkIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBtb2R1bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmpl
Y3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDE4ICs2MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay5nZXQo
KTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiogaW1wb3J0RnVuY3Rpb24odW5z
aWduZWQgaWR4KQorICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9uKHVu
c2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlkeCA8IG1fbnVtSW1w
b3J0RnVuY3Rpb25zKTsKICAgICAgICAgcmV0dXJuICZpbXBvcnRGdW5jdGlvbnMoKVtpZHhdOwog
ICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBpbXBvcnRGdW5jdGlvbnMoKQorICAg
IFdyaXRlQmFycmllcjxKU09iamVjdD4qIGltcG9ydEZ1bmN0aW9ucygpCiAgICAgewotICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU0NlbGw+Kj4oYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBzZXRJbXBvcnRGdW5jdGlvbihWTSYgdm0sIEpTQ2VsbCogdmFsdWUsIHVuc2lnbmVkIGlkeCkK
KyAgICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHZhbHVlLCB1bnNp
Z25lZCBpZHgpCiAgICAgewogICAgICAgICBpbXBvcnRGdW5jdGlvbihpZHgpLT5zZXQodm0sIHRo
aXMsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDExICs2NCwxMSBAQCBKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNz
ZW1ibHlUYWJsZShWCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIHdvcnRoIHRyeWluZyB0byBw
cmUtYWxsb2NhdGUgbWF4aW11bSBoZXJlLiBUaGUgc3BlYyByZWNvbW1lbmRzIGRvaW5nIHNvLgog
ICAgIC8vIEJ1dCBmb3Igbm93LCB3ZSdyZSBub3QgZG9pbmcgdGhhdC4KICAgICBtX2Z1bmN0aW9u
cyA9IE1hbGxvY1B0cjxXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uPjo6bWFsbG9jKHNpemVvZihXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7Ci0gICAg
bV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlv
bj4+OjptYWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQ
dHI8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgewogICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5n
ZXQoKVtpXSkgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwogICAgICAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlk
SW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KLSAgICAgICAgbmV3
ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KCk7CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdyaXRlQmFycmll
cjxKU09iamVjdD4oKTsKICAgICB9CiB9CiAKQEAgLTEwNiwxMSArMTA2LDExIEBAIGJvb2wgSlNX
ZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG4KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9mdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikg
KiBzdGF0aWNfY2FzdDxzaXplX3Q+KG5ld1NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zLnJlYWxs
b2Moc2l6ZW9mKFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPikgKiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG5ld1NpemUpKTsKKyAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2Moc2l6ZW9mKFdy
aXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CiAK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpIHsKICAgICAg
ICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsK
LSAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPFdlYkFz
c2VtYmx5RnVuY3Rpb24+KCk7CisgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0p
IFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKICAgICB9CiAgICAgbV9zaXplID0gbmV3U2l6ZTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIEpTV2ViQXNzZW1ibHlU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBuCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xlYXJGdW5j
dGlvbih1aW50MzJfdCBpbmRleCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6
ZSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4oKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdyaXRl
QmFycmllcjxKU09iamVjdD4oKTsKICAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uKCk7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdl
IHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgogfQpAQCAtMTMxLDYgKzEzMSwxMyBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mCiAgICAgbV9mdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOwogfQogCit2b2lkIEpTV2ViQXNz
ZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24oVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIGZ1bmN0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbV9zaXplKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKKyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJs
ZUZ1bmN0aW9uKGZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5
cG9pbnQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseVRhYmxlLmgJKHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0
ci5oPgogCkBAIC01MCwxMyArNTEsMTQgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KICAgICB1aW50MzJf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90
IG5ld1NpemUpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBn
ZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKKyAgICBKU09iamVjdCogZ2V0RnVuY3Rpb24odWlu
dDMyX3QgaW5kZXgpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6
ZSk7CiAgICAgICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5nZXQoKTsKICAg
ICB9CiAgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KTsKICAgICB2b2lkIHNl
dEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKFZNJiwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKik7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9CkBAIC03NCw3ICs3Niw3IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+IG1fZnVuY3Rp
b25zOwotICAgIE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4+IG1f
anNGdW5jdGlvbnM7CisgICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+IG1fanNG
dW5jdGlvbnM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwogICAgIHVp
bnQzMl90IG1fc2l6ZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIxMzY1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1lbW9yeS5oIgpAQCAtMTI5LDE1ICsxMzAsMjMgQEAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBXZWJBc3NlbWJseUluc3RhbgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5
TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJl
IGNhbGxhYmxlIikpKTsKIAotICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxs
KCk7CisgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2
YWx1ZSk7CiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBF
eG90aWMgT2JqZWN0OgotICAgICAgICAgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIGltcG9y
dGVkRXhwb3J0ID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNlbGwp
KSB7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAg
ICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsK
KyAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwg
d2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8v
IGEuIElmIHRoZSBzaWduYXR1cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9m
IGksIHRocm93IGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSBpbXBvcnRlZEV4cG9ydC0+
c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBp
bXBvcnRlZFNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24p
CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rp
b24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5z
aWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBi
ZSB2LltbQ2xvc3VyZV1dLgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFw
cGVyRnVuY3Rpb24tPmZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRl
eF07CiAgICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0
ZWRTaWduYXR1cmVJbmRleCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9y
dGVkIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFz
c2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIikpKTsKLSAgICAgICAgICAgICAgICAvLyBiLiBM
ZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gaWlpLiBPdGhlcndpc2U6CiAgICAgICAgICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5l
dyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBj
b2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVudHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlh
IFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZp
YSBUb1dlYkFzc2VtYmx5VmFsdWUuCkBAIC0xNDYsNyArMTU1LDcgQEAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBXZWJBc3NlbWJseUluc3RhbgogICAgICAgICAgICAgLy8gTm90ZTogYWRkaW5nIHRo
ZSBKU0NlbGwgdG8gdGhlIGluc3RhbmNlIGxpc3QgZnVsZmlsbHMgY2xvc3VyZSByZXF1aXJlbWVu
dHMgYi4gYWJvdmUgKHRoZSBXZWJBc3NlbWJseS5JbnN0YW5jZSB3aWwgYmUga2VwdCBhbGl2ZSkg
YW5kIHYuIGJlbG93ICh0aGUgSlNGdW5jdGlvbikuCiAKICAgICAgICAgICAgIEFTU0VSVChudW1J
bXBvcnRGdW5jdGlvbnMgPT0gaW1wb3J0LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBpbnN0YW5j
ZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0sIGNlbGwsIG51bUltcG9ydEZ1bmN0aW9ucysrKTsKKyAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRJbXBvcnRGdW5jdGlvbih2bSwgZnVuY3Rpb24sIG51bUlt
cG9ydEZ1bmN0aW9ucysrKTsKICAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGlt
cG9ydHMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjEzNjU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNb2R1bGUuaCIKQEAgLTExMCwxOSArMTExLDI2IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIC8vICAgaS4gSWYgdGhlcmUgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBmdW5jIGluIGZ1bmNzIHdob3NlIGZ1bmMuW1tD
bG9zdXJlXV0gZXF1YWxzIGMsIHRoZW4gcmV0dXJuIGZ1bmMuCiAgICAgICAgICAgICAvLyAgIGlp
LiAoTm90ZTogQXQgbW9zdCBvbmUgd3JhcHBlciBpcyBjcmVhdGVkIGZvciBhbnkgY2xvc3VyZSwg
c28gZnVuYyBpcyB1bmlxdWUsIGV2ZW4gaWYgdGhlcmUgYXJlIG11bHRpcGxlIG9jY3VycmFuY2Vz
IGluIHRoZSBsaXN0LiBNb3Jlb3ZlciwgaWYgdGhlIGl0ZW0gd2FzIGFuIGltcG9ydCB0aGF0IGlz
IGFscmVhZHkgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCwgdGhlbiB0aGUgb3Jp
Z2luYWwgZnVuY3Rpb24gb2JqZWN0IHdpbGwgYmUgZm91bmQuIEZvciBpbXBvcnRzIHRoYXQgYXJl
IHJlZ3VsYXIgSlMgZnVuY3Rpb25zLCBhIG5ldyB3cmFwcGVyIHdpbGwgYmUgY3JlYXRlZC4pCiAg
ICAgICAgICAgICBpZiAoZXhwLmtpbmRJbmRleCA8IGZ1bmN0aW9uSW1wb3J0Q291bnQpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRSBJbXBsZW1lbnQgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCA9IGV4cC5raW5kSW5kZXg7CisgICAgICAgICAgICAgICAgSlNP
YmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9u
SW5kZXgpLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5j
dGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKQorICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZh
bHVlID0gZnVuY3Rpb25JbXBvcnQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uSW1wb3J0LCBmdW5jdGlvbkluZGV4
LCBjb2RlQmxvY2ssIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vICAgaWlpLiBPdGhlcndpc2U6CisgICAg
ICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4
b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCisgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFw
cGVuZCBmdW5jIHRvIGZ1bmNzLgorICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVu
Yy4KKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBp
bnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0
dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vICAgaWlpLiBPdGhlcndpc2U6Ci0gICAgICAgICAg
ICAvLyAgICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVj
dCBjcmVhdGVkIGZyb20gYy4KLSAgICAgICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBm
dW5jcy4KLSAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4KLSAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJs
b2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJ
bmRleCk7Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5k
ZXgpOwotICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4
cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5
cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUg
PSBmdW5jdGlvbjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
V2FzbTo6RXh0ZXJuYWxLaW5kOjpUYWJsZTogewpAQCAtMTg0LDcgKzE5Miw3IEBAIHZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgQVNTRVJUKCFzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSA9PSBXYXNtOjpWb2lkKTsKICAgICAgICAgaWYgKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
IDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgIEpTQ2Vs
bCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSktPmdldCgpOworICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24g
PSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQo
KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rp
b24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKQEAgLTI0MSwxNCArMjQ5
LDI4IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAg
ICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzW2ldOworICAgICAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0
Q291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dWTVJhbmdlRXJyb3Ioc3RhdGUsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0aCBhbiBp
bXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gRklYTUUuIikpKTsKKyAgICAgICAg
ICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
bV9pbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9u
SW1wb3J0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiog
d2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGZ1
bmN0aW9uSW1wb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGV2ZXIgaW1w
b3J0IGEgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIHdlIHNldCB0aGUgaW1wb3J0IGFzIHRo
ZSB1bndyYXBwZWQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGEg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gY2FuIG5ldmVyIHdyYXAgYW5vdGhlciBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5
IHR5cGUgdGhpcyBjb3VsZCBiZSBpcyBXZWJBc3NlbWJseUZ1bmN0aW9uLgorICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2FzbUZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwgd2FzbUZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGFibGVJbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJsZUluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgbV9pbnN0
YW5jZS0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uSW1wb3J0LCBmdW5jdGlvbkluZGV4LCBjb2Rl
QmxvY2ssIHNpZ25hdHVyZUluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICsrdGFibGVJbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0g
Y29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
JnZtLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBl
eHBvcnQgbG9jYWwgZnVuY3Rpb24gImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAg
ICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50
IHcvIGluZGV4IDAuCkBAIC0yODgsNyArMzEwLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6ZXZhbHVhdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKEpTQ2VsbCogc3Rh
cnRGdW5jdGlvbiA9IG1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgeworICAgIGlmIChKU09iamVjdCog
c3RhcnRGdW5jdGlvbiA9IG1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgewogICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KHN0YXJ0RnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICAgICAgY2FsbChzdGF0ZSwgc3RhcnRGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBzdGF0ZS0+ZW1wdHlMaXN0
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3N0
YXJ0RnVuY3Rpb247CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3N0YXJ0RnVuY3Rpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMTM2NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogcmVzdWx0ID0gdGFi
bGUtPmdldEZ1bmN0aW9uKGluZGV4KSkKKyAgICBpZiAoSlNPYmplY3QqIHJlc3VsdCA9IHRhYmxl
LT5nZXRGdW5jdGlvbihpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIH0KQEAgLTEyMCw4
ICsxMjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCB2
YWx1ZSk7Ci0gICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiAhZnVuY3Rpb24pIHsKKyAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CisgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiAh
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdy
YXBwZXJGdW5jdGlvbikpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwKICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRv
IGJlIG51bGwgb3IgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuRnVuY3Rpb24iKSkpOwogICAg
ICAgICByZXR1cm4geyB9OwpAQCAtMTM5LDggKzE0MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICB0
YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCgh
IWZ1bmN0aW9uKTsKLSAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgZnVuY3Rp
b24pOworICAgICAgICBBU1NFUlQodmFsdWUuaXNPYmplY3QoKSAmJiBpc1dlYkFzc2VtYmx5SG9z
dEZ1bmN0aW9uKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSksIHdhc21GdW5jdGlvbiwgd2Fz
bVdyYXBwZXJGdW5jdGlvbikpOworICAgICAgICBBU1NFUlQoISF3YXNtRnVuY3Rpb24gfHwgISF3
YXNtV3JhcHBlckZ1bmN0aW9uKTsKKyAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAg
ICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5kZXgsIHdhc21GdW5jdGlvbik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgaW5kZXgsIHdhc21XcmFw
cGVyRnVuY3Rpb24pOwogICAgIH0KICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENs
YXNzSW5mbyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKSB9OworCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Kj4odm0sIGV4ZWMtPmpzQ2FsbGVlKCkpOworICAgIGlmICghd2FzbUZ1bmN0aW9uKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVkIGEgV2ViQXNzZW1ibHkgZnVuY3Rpb24iKSkpOwor
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0gd2FzbUZ1
bmN0aW9uLT5mdW5jdGlvbigpOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbChleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBBcmdMaXN0KGV4ZWMpKSk7Cit9CisKK1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9pbnRD
b2RlKQorICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCisgICAgLCBtX3dh
c21FbnRyeXBvaW50Q29kZSh3YXNtRW50cnlwb2ludENvZGUpCisgICAgLCBtX3NpZ25hdHVyZUlu
ZGV4KHNpZ25hdHVyZUluZGV4KQoreyB9CisKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5o
ZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ugc2hvdWxk
IG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKKyAgICBTdHJpbmcgbmFt
ZSA9ICIiOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVu
Y3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOworICAgIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlSW5kZXgsIGNvZGVCbG9jay0+d2FzbVRvSnNDYWxs
U3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkpOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSog
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVy
ZUluZGV4KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGNvZGVCbG9jayk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1
ZShmdW5jdGlvbikuaXNGdW5jdGlvbigpKTsKKyAgICBtX2Z1bmN0aW9uLnNldCh2bSwgdGhpcywg
ZnVuY3Rpb24pOworICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKK30K
KworU3RydWN0dXJlKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gOiBw
dWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7
CisKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCos
IHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlSW5kZXg7IH0KKyAgICB2
b2lkKiB3YXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fd2FzbUVudHJ5cG9pbnRDb2RlOyB9Cisg
ICAgSlNPYmplY3QqIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQoKTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKik7CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OlNpZ25hdHVyZUlu
ZGV4LCB2b2lkKiB3YXNtRW50cnlwb2ludENvZGUpOworCisgICAgLy8gV2Uga2VlcCBhIHJlZmVy
ZW5jZSB0byBvdXIgQ29kZUJsb2NrIGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdworICAgIC8vIHBvaW50
ZXIgdG8gYXNtIGNvZGUgdGhhdCBpdCBvd25zLgorICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
ZnVuY3Rpb247CisgICAgdm9pZCogbV93YXNtRW50cnlwb2ludENvZGU7CisgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggbV9zaWduYXR1cmVJbmRleDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQo=
</data>
<flag name="review"
          id="325617"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304072</attachid>
            <date>2017-03-10 14:02:41 -0800</date>
            <delta_ts>2017-03-10 14:06:53 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>63204</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM3MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAzLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIG1vcmUgZGVtb3MgcnVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1p
bGxlci4KKworICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGV4cG9ydC5kZWZh
dWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0
aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlvbi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6CisgICAgICAgICogd2FzbS9qcy1hcGkvd3Jh
cHBlci1mdW5jdGlvbi5qczogQWRkZWQuCisgICAgICAgIChleHBvcnRJbXBvcnQpOgorICAgICAg
ICAocmV0dXJuLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0LnRocm93
cy5tYWtlSW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5CYXIpOgorICAgICAgICAo
YXNzZXJ0LnRocm93cyk6CisKIDIwMTctMDMtMDkgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtFU25leHRdIEltcGxlbWVudCBPYmplY3QgUmVzdCAtIEltcGxl
bWVudGluZyBPYmplY3QgUmVzdCBEZXN0cnVjdHVyaW5nCkluZGV4OiBKU1Rlc3RzL3dhc20vQnVp
bGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkocmV2aXNpb24g
MjEzNzE3KQorKysgSlNUZXN0cy93YXNtL0J1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3
OSw3ICs1NzksMTAgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgIkVsZW1lbnQiOgotICAgICAgICAgICAg
ICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0aGlzW3Nl
Y3Rpb25dID0gZnVuY3Rpb24oLi4uYXJncykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
cy5sZW5ndGggIT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IllvdSdyZSBkb2luZyBpdCB3cm9uZy4gVGhpcyBlbGVtZW50IGRvZXMgbm90IHRha2UgYXJndW1l
bnRzLiBZb3UgbXVzdCBjaGFpbiB0aGUgY2FsbCB3aXRoIGFub3RoZXIgRWxlbWVudCgpIik7CisK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCdWlsZGVyID0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLApJbmRleDogSlNUZXN0cy93YXNtL2pzLWFw
aS93cmFwcGVyLWZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkv
d3JhcHBlci1mdW5jdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBp
L3dyYXBwZXItZnVuY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CisKKworZnVuY3Rpb24gZXhwb3J0SW1wb3J0KHR5cGUpIHsKKyAg
ICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZiIsIHR5cGUp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIsIHttb2R1bGU6ICJpbXAiLCBmaWVs
ZDogImYifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkuRW5kKCk7CisgICAgcmV0
dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsK
K30KKworeworICAgIGxldCB0eXBlID0geyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfTsK
KyAgICBsZXQgbW9kdWxlID0gZXhwb3J0SW1wb3J0KHR5cGUpOworICAgIGxldCBjYWxsZWQgPSBm
YWxzZTsKKyAgICBsZXQgZm9vID0gKGkpID0+IHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGkgKyA0MjsKKyAgICB9OworICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmOiBmb299fSk7CisgICAgYXNzZXJ0LnRy
dXRoeShpbnN0YW5jZS5leHBvcnRzLmZ1bmMgIT09IGZvbyk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7IGkrKykgeworICAgICAgICBsZXQgcjEgPSBpbnN0YW5jZS5leHBvcnRzLmZ1bmMo
aSk7CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgICAgIGxldCByMiA9IGZvbyhpKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7Cisg
ICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IGJ1
aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7
cGFyYW1zOiBbXX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpLkVuZCgpOworICAgICAgICBsZXQgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBub3QgdHlwZSBjaGVjay4KKyAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZjogaW5zdGFu
Y2UuZXhwb3J0cy5mdW5jfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsICJpbXBvcnRlZCBmdW5j
dGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBm
dW5jdGlvbidzIHNpZ25hdHVyZSIpOworICAgIH0KKworfQorCit7CisgICAgY29uc3QgdGFibGVE
ZXNjcmlwdGlvbiA9IHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDJ9OworICAgIGZ1bmN0
aW9uIG1ha2VJbnN0YW5jZSh0eXBlLCBpbXApIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5l
dyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVuYyhb
ImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkz
MiIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmMSIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDoiaTMy
In0pCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZjIiLCB7cGFyYW1zOiBbImkz
MiIsICJpMzIiXSwgcmV0OiJpMzIifSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVsZW1l
bnQoKQorICAgICAgICAgICAgICAgIC5FbGVtZW50KHtvZmZzZXQ6IDAsIGZ1bmN0aW9uSW5kaWNl
czogWzAsIDFdfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMSkKKyAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MCwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAg
ICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCk7CisgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbXApOworICAgIH0KKworICAgIGZ1bmN0aW9uIEJhcigp
e307CisgICAgbm9JbmxpbmUoQmFyKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0
IGZvbyA9IChpKSA9PiB7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIG5ldyBCYXI7
CisgICAgICAgIHJldHVybiBpKjQyOworICAgIH0KKyAgICBsZXQgdGFibGUgPSBuZXcgV2ViQXNz
ZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAgbGV0IGluc3QgPSBtYWtlSW5zdGFu
Y2Uoe3BhcmFtczpbJ2kzMiddLCByZXQ6ImkzMiJ9LCB7aW1wOiB7ZjE6IGZvbywgZjI6Zm9vLCB0
YWJsZX19KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBs
ZXQgcjEgPSBpbnN0LmV4cG9ydHMuZm9vKDAsIGkpOworICAgICAgICBhc3NlcnQudHJ1dGh5KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBsZXQgcjIgPSBmb28oaSk7
CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3QuZXhwb3J0
cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8g
YSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOworICAgICAgICBhc3NlcnQudHJ1dGh5
KCFjYWxsZWQpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewor
ICAgICAgICBsZXQgcjEgPSB0YWJsZS5nZXQoMCkoaSk7CisgICAgICAgIHRhYmxlLnNldCgwLCB0
YWJsZS5nZXQoMCkpOyAvLyBqdXN0IG1ha2Ugc3VyZSBzZXR0aW5nIGEgd3JhcHBlciBmdW5jdGlv
biB3b3Jrcy4KKyAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICBjYWxsZWQg
PSBmYWxzZTsKKyAgICAgICAgbGV0IHIyID0gdGFibGUuZ2V0KDEpKGkpOworICAgICAgICBhc3Nl
cnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBhc3Nl
cnQuZXEocjEsIHIyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCBuZXh0SW5zdCA9IG1h
a2VJbnN0YW5jZSh7cGFyYW1zOlsnaTMyJ10sIHJldDoiaTMyIn0sIHtpbXA6IHtmMTogdGFibGUu
Z2V0KDApLCBmMjppbnN0LmV4cG9ydHMuZm9vLCB0YWJsZX19KTsKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCByMSA9IG5leHRJbnN0LmV4
cG9ydHMuZm9vKDAsIGkpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAg
ICAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgcjIgPSBmb28oaSk7Cisg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV4dEluc3QuZXhwb3J0cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRj
aCIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgICAgICBsZXQg
cjEgPSB0YWJsZS5nZXQoMSkoMCwgaSk7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxl
ZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCByMiA9IGZv
byhpKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgICAgIGNh
bGxlZCA9IGZhbHNlOworICAgICAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgICAgIH0K
KyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzcxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw4MyBAQAorMjAxNy0wMy0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBtb3JlIGRlbW9zIHJ1bgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTc2MDMxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBhbm90aGVyIFdhc20gZGVtbyBydW46CisgICAg
ICAgIGh0dHBzOi8va3JpcGtlbi5naXRodWIuaW8vQmFuYW5hQnJlYWQvY3ViZTIvYmIuaHRtbAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0d28gYnVnczoKKyAgICAgICAgMS4g
V2hlbiBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSB3YXMgYWRkZWQsIHdlIGRpZCBub3QgcHJvcGVy
bHkKKyAgICAgICAgdXBkYXRlIHRoZSBsYXN0IEpTIHR5cGUgdmFsdWUuCisgICAgICAgIDIuIE91
ciBjb2RlIGZvciBvdXIgSlMgLT4gV2FzbSBlbnRyeXBvaW50IHdhcyB3cm9uZy4gSXQgbGVhZCB0
byBiYWQKKyAgICAgICAgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIHdvdWxkIGVtaXQgQjMgdGhh
dCB3b3VsZCB3cml0ZSBvdmVyIHIxMgorICAgICAgICBhbmQgcmJ4IChvbiB4ODYpIHdoaWNoIGlz
IGludmFsaWQgc2luY2UgdGhvc2UgYXJlIG91ciBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBU
aGlzIHBhdGNoIGp1c3QgcmV3cml0ZXMgdGhlIGVudHJ5cG9pbnQgdG8gdXNlIGhhbmQgd3JpdHRl
biBhc3NlbWJsZXIKKyAgICAgICAgY29kZS4gSSB3YXMgcGxhbm5pbmcgb24gZG9pbmcgdGhpcyBh
bnl3YXlzIGJlY2F1c2UgaXQncyBhIGNvbXBpbGUKKyAgICAgICAgdGltZSBzcGVlZCBib29zdC4K
KyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzb21l
IG5ldyBBUEkgZmVhdHVyZXM6CisgICAgICAgIFdlIGNhbiBub3cgZXhwb3J0IGFuIGltcG9ydCwg
ZWl0aGVyIHZpYSBhIGRpcmVjdCBleHBvcnQsIG9yIHZpYSBhIFRhYmxlIGFuZCB0aGUKKyAgICAg
ICAgRWxlbWVudCBzZWN0aW9uLiBJJ3ZlIGFkZGVkIGEgbmV3IGNsYXNzIGNhbGxlZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiB0aGF0CisgICAgICAgIGp1c3Qgd3JhcHMgb3ZlciBhIEpTT2Jq
ZWN0IHRoYXQgaXMgYSBmdW5jdGlvbi4gV3JhcHBlciBmdW5jdGlvbnMgaGF2ZSB0eXBlcworICAg
ICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbSwgc28gaWYgdGhleSdyZSByZS1pbXBvcnRlZCwgb3Ig
Y2FsbGVkIHZpYSBjYWxsX2luZGlyZWN0LAorICAgICAgICB0aGV5IGNhbiBiZSB0eXBlIGNoZWNr
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
aDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg6Cisg
ICAgICAgIChKU0M6OmlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmltcG9ydEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
c2V0SW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1
bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjYWxsV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6ZnVuY3Rpb24pOgorCiAyMDE3LTAz
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQjMgc2hvdWxk
IGhhdmUgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBhdG9taWMgb3BlcmF0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEzNzE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Njcs
NiArOTY3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwCisgICAg
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogICAgIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCiAgICAgeWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTMxMiw2ICsxMzEyLDggQEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJC
NzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlw
ZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdh
c21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYx
RDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxh
bi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdG
NDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zNzg3LDYgKzM3ODksOCBAQAogCQk1MkMwNjExRDFBQTUxRTFC
MDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAv
KiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIg
LyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYz
MDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTAyLDYgKzc5MDYsOCBA
QAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMzksNiArODI0NSw3IEBACiAJ
CQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENvbGxlY3Rp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5
ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNTAsNiArMTAzNTcsNyBAQAogCQkJCUE1MDNGQTE5
MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAw
QUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1NzA2REUx
MThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTIs
NiArODkyLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
ICAgICBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXZWJBc3NlbWJseTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB3ZWJBc3NlbWJseVByb3RvdHlwZSkpOwogICAgICAg
ICBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fd2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRlKHZt
LCB0aGlzLCBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIldlYkFz
c2VtYmx5IiksIHdlYkFzc2VtYmx5LCBEb250RW51bSk7CiAKQEAgLTEyNzIsNiArMTI3Myw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBwdWJsaWM6
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0
cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKIApAQCAtNjEyLDYgKzYxMyw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBT
dHJ1Y3R1cmUqIHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBl
bnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogCiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsCiAK
LSAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlw
ZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBlLAogICAgIE1heEpTVHlwZSA9IDBiMTExMTExMTEs
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDYgKzk0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZDYWxsZWVzKCkpOwogICAgIH0KIAorICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJG
b3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbXBvcnRJbmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV93YXNtRXhpdFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8
V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMzcx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzOSw4NSArMTAzOSwxNjUgQEAgdm9pZCBCM0lSR2VuZXJhdG9y
OjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogCiBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUlu
dGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAg
QmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQ0NhbGxIZWxwZXJzJiBq
aXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIAotICAgIE9yaWdpbiBv
cmlnaW47CisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKLSAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZmdW5jdGlvbi5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgcHJvYywgb3JpZ2luLCBibG9jayk7CisgICAgLy8gRklYTUUgU3RvcCB1
c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24g
PSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmZnVuY3Rpb24uanNUb1dhc21DYWxsZWVNb3ZlTG9j
YXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxs
ZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlOworICAg
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgdG9TYXZlLnNldChwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyKTsK
KyAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgIHRvU2F2ZS5zZXQocmVnSW5mby5zaXplUmVnaXN0
ZXIpOwogCisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMo
KTsKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBKUyB3cmFwcGVyIHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4K
LSAgICAgICAgLy8gSnVzdCBwcmV2ZW50IGFnYWluc3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5h
YmxlZC4KLSAgICAgICAgVmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwotICAgICAgICBWYWx1ZSog
b2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBvcmlnaW4sCi0gICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRP
ZkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBz
YXZlcy4KKyAgICAgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICAgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1Nh
dmVTaXplKTsKKyAgICB9CiAKLSAgICAgICAgVmFsdWUqIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9
IGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBvcmlnaW4sIHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1Nw
aWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBv
aW50ZXJCYXNlZCk7CisgICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCi0gICAgICAgIENoZWNrVmFsdWUqIGFyZ3Vt
ZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ss
IG9yaWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3Zl
LCBvcmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3VudCwgYXJndW1lbnRDb3VudCkpOworICAgIHVu
c2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yo
dm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVh
ZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBS
cyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUtPmFyZ3VtZW50KGkpKSB7
CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAg
ICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsK
KyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICBpZiAobnVt
RlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAr
K251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgYXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQu
YnJlYWtwb2ludCgpOwotICAgICAgICB9KTsKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsK
KyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNp
emUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ug
c2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9y
IG5vdC4KKyAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBh
IHNjcmF0Y2guIFRoYXQgc2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFt
cyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5n
IGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVn
IHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0
ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CiAg
ICAgfQogCi0gICAgLy8gRklYTUUgVGhlIGluc3RhbmNlIGlzIGN1cnJlbnRseSBzZXQgYnkgdGhl
IEMrKyBjb2RlIGluIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwuIFdlIHNob3VsZG4ndCBnbyB0
aHJvdWdoIHRoZSBleHRyYSBDKysgaG9vcC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQ4NgotICAgIFZhbHVlKiBpbnN0YW5jZSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAotICAgICAg
ICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlKSk7Ci0gICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUodm0sIGluZm8ubWVtb3J5LCBpbnN0YW5jZSwgcHJvYywgYmxvY2spOwotCi0gICAgLy8gR2V0
IG91ciBhcmd1bWVudHMuCi0gICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOwotICAgIGpzY0Nh
bGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIHByb2MsIGJsb2NrLCBv
cmlnaW4sIFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3VtZW50
cyBpbnRvIHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5zZXR1cENhbGwocHJvYywgYmxvY2ssIG9yaWdpbiwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWdu
YXR1cmUtPnJldHVyblR5cGUoKSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
Ci0gICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCogY29udGV4dCA9ICZjb21waWxhdGlvbkNvbnRl
eHQ7Ci0KLSAgICAgICAgLy8gd2FzbSAtPiB3YXNtIGNhbGxzIGNsb2JiZXIgcGlubmVkIHJlZ2lz
dGVycyB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgSlMgLT4gd2FzbSB0cmFuc2l0aW9uIG11c3QgdGhl
cmVmb3JlIHJlc3RvcmUgdGhlc2UgcGlubmVkIHJlZ2lzdGVycyAod2hpY2ggYXJlIHVzdWFsbHkg
Y2FsbGVlLXNhdmVkKSB0byBhY2NvdW50IGZvciB0aGlzLgotICAgICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAg
ICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7Ci0gICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVk
UmVncy0+c2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVS
ZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisgICAgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7
CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhl
IHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0
aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAg
ICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAg
ICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICog
c2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNh
c2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAg
ICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0
Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5h
cmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3By
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAg
ICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
d2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdh
c21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3
YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMy
KQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW2NvbnRleHRdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVv
Zih2b2lkKik7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmpzRW50cnlwb2lu
dFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gY2FsbDsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAg
aWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICBqaXQubG9hZFB0cigmdm0udG9wSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUo
KSA+PSAxKTsKKyAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhl
IGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vi
c2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6
b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1l
bW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBqaXQuYWRk
NjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAg
fQorCisgICAgY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRD
YWxsID0gaml0LmNhbGwoKTsKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVn
QXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdB
dE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZz
ZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KIAotICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSkgewotICAgIGNhc2UgV2FzbTo6Vm9pZDoKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4pOwotICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIHJlc3VsdCA9IGJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdHdpc2VDYXN0LCBvcmlnaW4sIHJlc3VsdCk7Ci0gICAgICAgIEZBTExUSFJP
VUdIOwotICAgIGNhc2UgV2FzbTo6STMyOgotICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBi
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIG9yaWdpbiwgcmVz
dWx0KTsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RnVuYzoKLSAgICBjYXNlIFdhc206OkFu
eWZ1bmM6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0g
ICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MpOwotICAgIEIzOjpnZW5lcmF0ZShwcm9j
LCAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVCk7Ci0gICAgY29tcGlsYXRpb25D
b250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCk7
Ci0gICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBw
cm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKKyAgICBqaXQucmV0KCk7CiB9CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+
JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWdu
ZWQgb3B0TGV2ZWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDYgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9CiAgICAgdm9p
ZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGNhbGxlZU1v
dmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSBy
ZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMTM3
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNzEsNiArNzMsMzYgQEAgQUxXQVlTX0lOTElORSB1aW50OF90
KiBnZXRXYXNtQnVmZmVyRnJvbQogICAgIHJldHVybiBhcnJheUJ1ZmZlclZpZXcgPyBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXJWaWV3LT52ZWN0b3IoKSkgOiBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oYXJyYXlCdWZmZXItPmltcGwoKS0+ZGF0YSgpKTsKIH0KIAorQUxXQVlTX0lOTElO
RSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCit7CisgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHModm0sIFdlYkFzc2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKKyAgICAgICAgd2FzbUZ1bmN0
aW9uID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpOworICAgICAgICB3YXNt
V3JhcHBlckZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
aW5mbygpKSkgeworICAgICAgICB3YXNtV3JhcHBlckZ1bmN0aW9uID0ganNDYXN0PFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKj4ob2JqZWN0KTsKKyAgICAgICAgd2FzbUZ1bmN0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworQUxXQVlTX0lOTElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBK
U1ZhbHVlIHZhbHVlLCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCit7CisgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzV2Vi
QXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwgd2FzbUZ1
bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKK30KKworCitBTFdBWVNfSU5MSU5FIGJvb2wg
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdW51c2VkOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiB1bnVzZWQyOworICAgIHJldHVybiBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBvYmplY3QsIHVudXNlZCwgdW51c2VkMik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lv
biAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3QKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
ICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBt
ZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9m
KFdyaXRlQmFycmllcjxKU0NlbGw+KSk7CisgICAgbWVtc2V0KGltcG9ydEZ1bmN0aW9ucygpLCAw
LCBtX251bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSk7
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMTM3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsMTggKzYwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLmdldCgpOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBp
bXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Piog
aW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOwogICAgICAgICByZXR1cm4gJmltcG9ydEZ1
bmN0aW9ucygpW2lkeF07CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4qIGltcG9y
dEZ1bmN0aW9ucygpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25z
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNDZWxsKiB2YWx1
ZSwgdW5zaWduZWQgaWR4KQorICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBKU09i
amVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIGltcG9ydEZ1bmN0aW9u
KGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNp
b24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDExIEBAIEpTV2ViQXNzZW1i
bHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFYKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
d29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29t
bWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0
LgogICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+Ojpt
YWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxX
ZWJBc3NlbWJseUZ1bmN0aW9uPj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2Vt
Ymx5RnVuY3Rpb24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7CisgICAgbV9qc0Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7CiAgICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CiAgICAg
ICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpT
aWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBj
b2RlLgotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8
V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KIH0KIApAQCAtMTA2LDExICsx
MDYsMTEgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgbgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwotICAgIG1f
anNGdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMu
cmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG5ld1NpemUpKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkgewogICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbigpOwotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KICAgICBt
X3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJv
b2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG4KIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKICAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiB9CkBAIC0x
MzEsNiArMTMxLDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYK
ICAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1
bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQoKSk7CiB9
CiAKK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90
IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCksIGZ1
bmN0aW9uLT53YXNtRW50cnlwb2ludCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjEzNzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNs
dWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKQEAgLTUwLDEzICs1MSwxNCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11
bTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQorICAgIEpTT2JqZWN0
KiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdLmdldCgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpOwogICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1i
bHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwg
bV9zaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0K
QEAgLTc0LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVG
dW5jdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3Nl
bWJseUZ1bmN0aW9uPj4gbV9qc0Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVy
PEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
X21heGltdW07CiAgICAgdWludDMyX3QgbV9zaXplOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjb25zdCBDbGFz
c0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19pCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBkYXRhTG9nTG4oIkNhbGxpbmcgaW50byB3YXNtIik7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uKj4odm0sIGV4ZWMtPmpzQ2FsbGVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKQEAgLTEyOSwxNSArMTMwLDIzIEBAIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW4KICAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQg
ZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAKLSAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganND
YXN0PEpTT2JqZWN0Kj4odmFsdWUpOwogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIGlmIChXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydCA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5j
dGlvbio+KHZtLCBjZWxsKSkgeworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2Fz
bUZ1bmN0aW9uOworICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21X
cmFwcGVyRnVuY3Rpb247CisgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlv
bih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKICAg
ICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2gg
dGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0g
aW1wb3J0ZWRFeHBvcnQtPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgICAgICBp
ZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUlu
ZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdy
YXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
Yi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlvbigpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVy
ZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2ltcG9ydC5raW5kSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25hdHVy
ZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRo
ZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7Ci0gICAgICAg
ICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgogICAgICAgICAgICAgLy8gYS4gTGV0
IGNsb3N1cmUgYmUgYSBuZXcgaG9zdCBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4gc2lnbmF0dXJlIHdo
aWNoIGNhbGxzIHYgYnkgY29lcmNpbmcgV2ViQXNzZW1ibHkgYXJndW1lbnRzIHRvIEphdmFTY3Jp
cHQgYXJndW1lbnRzIHZpYSBUb0pTVmFsdWUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCwgaWYgYW55
LCBieSBjb2VyY2luZyB2aWEgVG9XZWJBc3NlbWJseVZhbHVlLgpAQCAtMTQ2LDcgKzE1NSw3IEBA
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW4KICAgICAgICAgICAgIC8v
IE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0IGZ1bGZpbGxzIGNs
b3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHkuSW5zdGFuY2Ugd2ls
IGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24pLgogCiAgICAgICAg
ICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwotICAg
ICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9uKHZtLCBjZWxsLCBudW1JbXBvcnRG
dW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0RnVuY3Rpb24odm0s
IGZ1bmN0aW9uLCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7CiAgICAgICAgICAgICAvLyB2LiBBcHBl
bmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJK
U0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC0xMTAsMTkgKzExMSwyNiBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAvLyAgIGkuIElm
IHRoZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgZnVuYyBpbiBmdW5j
cyB3aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVybiBmdW5jLgogICAg
ICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBm
b3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0
aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBh
biBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmpl
Y3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3Ig
aW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxs
IGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXggPCBmdW5jdGlvbklt
cG9ydENvdW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IHJlLWV4cG9y
dGluZyBhbiBpbXBvcnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU1MTAKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2luZEluZGV4OworICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3RhbmNlLT5pbXBvcnRG
dW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGlzV2Vi
QXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKKyAgICAgICAgICAgICAg
ICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbkltcG9y
dCwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAgIGlpaS4g
T3RoZXJ3aXNlOgorICAgICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBv
cnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgorICAgICAgICAgICAg
ICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KKyAgICAgICAgICAgICAgICAvLyAg
ICAgYy4gUmV0dXJuIGZ1bmMuCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAg
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNp
Z25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5m
aWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9p
bnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVl
ID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAgIGlpaS4gT3RoZXJ3
aXNlOgotICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0
aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCi0gICAgICAgICAgICAvLyAgICAgYi4g
QXBwZW5kIGZ1bmMgdG8gZnVuY3MuCi0gICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMu
Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBj
b2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtp
bmRJbmRleCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSog
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRD
YWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsKQEAgLTE4NCw3ICsx
OTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAg
IEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQoc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7CiAgICAgICAgIGlmIChzdGFydEZ1
bmN0aW9uSW5kZXhTcGFjZSA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7Ci0g
ICAgICAgICAgICBKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rp
b24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0
KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0
aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
CkBAIC0yNDEsMTQgKzI0OSwyOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAogICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50LmZ1bmN0aW9uSW5k
aWNlc1tpXTsKKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgY29kZUJsb2Nr
LT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Vk1SYW5nZUVycm9y
KHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxl
IHZhbHVlIHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1F
LiIpKSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGpz
Q2FzdDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgp
LT5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0
aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQg
dGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQmVjYXVzZSBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIGNhbiBuZXZlciB3cmFw
IGFub3RoZXIgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgb25seSB0eXBlIHRoaXMgY291bGQgYmUgaXMgV2ViQXNzZW1ibHlGdW5jdGlv
bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhc21GdW5jdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5k
ZXgsIHdhc21GdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpj
cmVhdGUodm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbkltcG9ydCwgZnVu
Y3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICArK3RhYmxlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50
cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAg
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAg
ICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGlu
ZGV4IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUg
dGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgpAQCAtMjg4LDcgKzMxMCw3IEBAIEpTVmFsdWUg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKKyAg
ICBpZiAoSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsK
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
SlNDOjpnZXRDYWxsRGF0YShzdGFydEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGNhbGwo
c3RhdGUsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwg
c3RhdGUtPmVtcHR5TGlzdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjEzNzE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0gICAgV3JpdGVCYXJy
aWVyPEpTQ2VsbD4gbV9zdGFydEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
bV9zdGFydEZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rp
b24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAgaWYgKEpTT2JqZWN0
KiByZXN1bHQgPSB0YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiB9CkBAIC0xMjAsOCArMTIwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3
ZWJBc3NlbWJseQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5
RnVuY3Rpb24qPih2bSwgdmFsdWUpOwotICAgIGlmICghdmFsdWUuaXNOdWxsKCkgJiYgIWZ1bmN0
aW9uKSB7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uOworICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOworICAgIGlmICghdmFs
dWUuaXNOdWxsKCkgJiYgIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNt
RnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVjdHMgdGhlIHNl
Y29uZCBhcmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5LkZ1
bmN0aW9uIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEzOSw4ICsxNDAsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIGlmICh2YWx1ZS5pc051
bGwoKSkKICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwogICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQoISFmdW5jdGlvbik7Ci0gICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2
bSwgaW5kZXgsIGZ1bmN0aW9uKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkgJiYg
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLCB3
YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKTsKKyAgICAgICAgQVNTRVJUKCEhd2Fz
bUZ1bmN0aW9uIHx8ICEhd2FzbVdyYXBwZXJGdW5jdGlvbik7CisgICAgICAgIGlmICh3YXNtRnVu
Y3Rpb24pCisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGluZGV4LCB3YXNtRnVu
Y3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0s
IGluZGV4LCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIKKworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRnVu
Y3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnNfaW5m
byA9IHsgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikgfTsKKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbio+KHZtLCBleGVjLT5qc0NhbGxlZSgpKTsKKyAgICBpZiAoIXdhc21G
dW5jdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5
IGZ1bmN0aW9uIikpKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIEpTT2JqZWN0KiBm
dW5jdGlvbiA9IHdhc21GdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxs
RGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwor
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChl
eGVjKSkpOworfQorCitXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHZvaWQq
IHdhc21FbnRyeXBvaW50Q29kZSkKKyAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKQorICAgICwgbV93YXNtRW50cnlwb2ludENvZGUod2FzbUVudHJ5cG9pbnRDb2RlKQorICAg
ICwgbV9zaWduYXR1cmVJbmRleChzaWduYXR1cmVJbmRleCkKK3sgfQorCitXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghZnVuY3Rpb24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5m
bygpKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7
CisgICAgU3RyaW5nIG5hbWUgPSAiIjsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsK
KyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxv
Y2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKKyAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwg
ZXhlY3V0YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBj
b2RlQmxvY2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiBm
dW5jdGlvbiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOworICAgIFJFTEVB
U0VfQVNTRVJUKEpTVmFsdWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24oKSk7CisgICAgbV9mdW5jdGlv
bi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMs
IGNvZGVCbG9jayk7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2NvZGVCbG9jayk7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+
bV9mdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYg
SlNGdW5jdGlvbiBCYXNlOworCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBz
dGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVy
ZUluZGV4OyB9CisgICAgdm9pZCogd2FzbUVudHJ5cG9pbnQoKSB7IHJldHVybiBtX3dhc21FbnRy
eXBvaW50Q29kZTsgfQorICAgIEpTT2JqZWN0KiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rp
b24uZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpT
T2JqZWN0KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworCitwcml2YXRlOgorICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtOjpTaWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9pbnRDb2RlKTsKKworICAgIC8v
IFdlIGtlZXAgYSByZWZlcmVuY2UgdG8gb3VyIENvZGVCbG9jayBiZWNhdXNlIHdlIGhhdmUgYSBy
YXcKKyAgICAvLyBwb2ludGVyIHRvIGFzbSBjb2RlIHRoYXQgaXQgb3ducy4KKyAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOworICAgIHZvaWQqIG1fd2FzbUVudHJ5cG9pbnRDb2Rl
OworICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304073</attachid>
            <date>2017-03-10 14:06:53 -0800</date>
            <delta_ts>2017-03-10 16:18:33 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>62578</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM3MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAzLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIG1vcmUgZGVtb3MgcnVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1p
bGxlci4KKworICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGV4cG9ydC5kZWZh
dWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0
aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlvbi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6CisgICAgICAgICogd2FzbS9qcy1hcGkvd3Jh
cHBlci1mdW5jdGlvbi5qczogQWRkZWQuCisgICAgICAgIChleHBvcnRJbXBvcnQpOgorICAgICAg
ICAocmV0dXJuLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0LnRocm93
cy5tYWtlSW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5CYXIpOgorICAgICAgICAo
YXNzZXJ0LnRocm93cyk6CisKIDIwMTctMDMtMDkgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtFU25leHRdIEltcGxlbWVudCBPYmplY3QgUmVzdCAtIEltcGxl
bWVudGluZyBPYmplY3QgUmVzdCBEZXN0cnVjdHVyaW5nCkluZGV4OiBKU1Rlc3RzL3dhc20vQnVp
bGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkocmV2aXNpb24g
MjEzNzE3KQorKysgSlNUZXN0cy93YXNtL0J1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3
OSw3ICs1NzksMTAgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgIkVsZW1lbnQiOgotICAgICAgICAgICAg
ICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0aGlzW3Nl
Y3Rpb25dID0gZnVuY3Rpb24oLi4uYXJncykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
cy5sZW5ndGggIT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IllvdSdyZSBkb2luZyBpdCB3cm9uZy4gVGhpcyBlbGVtZW50IGRvZXMgbm90IHRha2UgYXJndW1l
bnRzLiBZb3UgbXVzdCBjaGFpbiB0aGUgY2FsbCB3aXRoIGFub3RoZXIgRWxlbWVudCgpIik7CisK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCdWlsZGVyID0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLApJbmRleDogSlNUZXN0cy93YXNtL2pzLWFw
aS93cmFwcGVyLWZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkv
d3JhcHBlci1mdW5jdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBp
L3dyYXBwZXItZnVuY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CisKKworZnVuY3Rpb24gZXhwb3J0SW1wb3J0KHR5cGUpIHsKKyAg
ICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZiIsIHR5cGUp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIsIHttb2R1bGU6ICJpbXAiLCBmaWVs
ZDogImYifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkuRW5kKCk7CisgICAgcmV0
dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsK
K30KKworeworICAgIGxldCB0eXBlID0geyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfTsK
KyAgICBsZXQgbW9kdWxlID0gZXhwb3J0SW1wb3J0KHR5cGUpOworICAgIGxldCBjYWxsZWQgPSBm
YWxzZTsKKyAgICBsZXQgZm9vID0gKGkpID0+IHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGkgKyA0MjsKKyAgICB9OworICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmOiBmb299fSk7CisgICAgYXNzZXJ0LnRy
dXRoeShpbnN0YW5jZS5leHBvcnRzLmZ1bmMgIT09IGZvbyk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7IGkrKykgeworICAgICAgICBsZXQgcjEgPSBpbnN0YW5jZS5leHBvcnRzLmZ1bmMo
aSk7CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgICAgIGxldCByMiA9IGZvbyhpKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7Cisg
ICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IGJ1
aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7
cGFyYW1zOiBbXX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpLkVuZCgpOworICAgICAgICBsZXQgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBub3QgdHlwZSBjaGVjay4KKyAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZjogaW5zdGFu
Y2UuZXhwb3J0cy5mdW5jfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsICJpbXBvcnRlZCBmdW5j
dGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBm
dW5jdGlvbidzIHNpZ25hdHVyZSIpOworICAgIH0KKworfQorCit7CisgICAgY29uc3QgdGFibGVE
ZXNjcmlwdGlvbiA9IHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDJ9OworICAgIGZ1bmN0
aW9uIG1ha2VJbnN0YW5jZSh0eXBlLCBpbXApIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5l
dyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVuYyhb
ImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkz
MiIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmMSIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDoiaTMy
In0pCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZjIiLCB7cGFyYW1zOiBbImkz
MiIsICJpMzIiXSwgcmV0OiJpMzIifSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVsZW1l
bnQoKQorICAgICAgICAgICAgICAgIC5FbGVtZW50KHtvZmZzZXQ6IDAsIGZ1bmN0aW9uSW5kaWNl
czogWzAsIDFdfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMSkKKyAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MCwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAg
ICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCk7CisgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbXApOworICAgIH0KKworICAgIGZ1bmN0aW9uIEJhcigp
e307CisgICAgbm9JbmxpbmUoQmFyKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0
IGZvbyA9IChpKSA9PiB7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIG5ldyBCYXI7
CisgICAgICAgIHJldHVybiBpKjQyOworICAgIH0KKyAgICBsZXQgdGFibGUgPSBuZXcgV2ViQXNz
ZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAgbGV0IGluc3QgPSBtYWtlSW5zdGFu
Y2Uoe3BhcmFtczpbJ2kzMiddLCByZXQ6ImkzMiJ9LCB7aW1wOiB7ZjE6IGZvbywgZjI6Zm9vLCB0
YWJsZX19KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBs
ZXQgcjEgPSBpbnN0LmV4cG9ydHMuZm9vKDAsIGkpOworICAgICAgICBhc3NlcnQudHJ1dGh5KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBsZXQgcjIgPSBmb28oaSk7
CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3QuZXhwb3J0
cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8g
YSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOworICAgICAgICBhc3NlcnQudHJ1dGh5
KCFjYWxsZWQpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewor
ICAgICAgICBsZXQgcjEgPSB0YWJsZS5nZXQoMCkoaSk7CisgICAgICAgIHRhYmxlLnNldCgwLCB0
YWJsZS5nZXQoMCkpOyAvLyBqdXN0IG1ha2Ugc3VyZSBzZXR0aW5nIGEgd3JhcHBlciBmdW5jdGlv
biB3b3Jrcy4KKyAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICBjYWxsZWQg
PSBmYWxzZTsKKyAgICAgICAgbGV0IHIyID0gdGFibGUuZ2V0KDEpKGkpOworICAgICAgICBhc3Nl
cnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBhc3Nl
cnQuZXEocjEsIHIyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCBuZXh0SW5zdCA9IG1h
a2VJbnN0YW5jZSh7cGFyYW1zOlsnaTMyJ10sIHJldDoiaTMyIn0sIHtpbXA6IHtmMTogdGFibGUu
Z2V0KDApLCBmMjppbnN0LmV4cG9ydHMuZm9vLCB0YWJsZX19KTsKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCByMSA9IG5leHRJbnN0LmV4
cG9ydHMuZm9vKDAsIGkpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAg
ICAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgcjIgPSBmb28oaSk7Cisg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV4dEluc3QuZXhwb3J0cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRj
aCIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgICAgICBsZXQg
cjEgPSB0YWJsZS5nZXQoMSkoMCwgaSk7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxl
ZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCByMiA9IGZv
byhpKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgICAgIGNh
bGxlZCA9IGZhbHNlOworICAgICAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgICAgIH0K
KyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzcxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw4MyBAQAorMjAxNy0wMy0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBtb3JlIGRlbW9zIHJ1bgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTc2MDMxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBhbm90aGVyIFdhc20gZGVtbyBydW46CisgICAg
ICAgIGh0dHBzOi8va3JpcGtlbi5naXRodWIuaW8vQmFuYW5hQnJlYWQvY3ViZTIvYmIuaHRtbAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0d28gYnVnczoKKyAgICAgICAgMS4g
V2hlbiBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSB3YXMgYWRkZWQsIHdlIGRpZCBub3QgcHJvcGVy
bHkKKyAgICAgICAgdXBkYXRlIHRoZSBsYXN0IEpTIHR5cGUgdmFsdWUuCisgICAgICAgIDIuIE91
ciBjb2RlIGZvciBvdXIgSlMgLT4gV2FzbSBlbnRyeXBvaW50IHdhcyB3cm9uZy4gSXQgbGVhZCB0
byBiYWQKKyAgICAgICAgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIHdvdWxkIGVtaXQgQjMgdGhh
dCB3b3VsZCB3cml0ZSBvdmVyIHIxMgorICAgICAgICBhbmQgcmJ4IChvbiB4ODYpIHdoaWNoIGlz
IGludmFsaWQgc2luY2UgdGhvc2UgYXJlIG91ciBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBU
aGlzIHBhdGNoIGp1c3QgcmV3cml0ZXMgdGhlIGVudHJ5cG9pbnQgdG8gdXNlIGhhbmQgd3JpdHRl
biBhc3NlbWJsZXIKKyAgICAgICAgY29kZS4gSSB3YXMgcGxhbm5pbmcgb24gZG9pbmcgdGhpcyBh
bnl3YXlzIGJlY2F1c2UgaXQncyBhIGNvbXBpbGUKKyAgICAgICAgdGltZSBzcGVlZCBib29zdC4K
KyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzb21l
IG5ldyBBUEkgZmVhdHVyZXM6CisgICAgICAgIFdlIGNhbiBub3cgZXhwb3J0IGFuIGltcG9ydCwg
ZWl0aGVyIHZpYSBhIGRpcmVjdCBleHBvcnQsIG9yIHZpYSBhIFRhYmxlIGFuZCB0aGUKKyAgICAg
ICAgRWxlbWVudCBzZWN0aW9uLiBJJ3ZlIGFkZGVkIGEgbmV3IGNsYXNzIGNhbGxlZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiB0aGF0CisgICAgICAgIGp1c3Qgd3JhcHMgb3ZlciBhIEpTT2Jq
ZWN0IHRoYXQgaXMgYSBmdW5jdGlvbi4gV3JhcHBlciBmdW5jdGlvbnMgaGF2ZSB0eXBlcworICAg
ICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbSwgc28gaWYgdGhleSdyZSByZS1pbXBvcnRlZCwgb3Ig
Y2FsbGVkIHZpYSBjYWxsX2luZGlyZWN0LAorICAgICAgICB0aGV5IGNhbiBiZSB0eXBlIGNoZWNr
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
aDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg6Cisg
ICAgICAgIChKU0M6OmlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmltcG9ydEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
c2V0SW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1
bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjYWxsV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6ZnVuY3Rpb24pOgorCiAyMDE3LTAz
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQjMgc2hvdWxk
IGhhdmUgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBhdG9taWMgb3BlcmF0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEzNzE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Njcs
NiArOTY3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwCisgICAg
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogICAgIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCiAgICAgeWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTMxMiw2ICsxMzEyLDggQEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJC
NzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlw
ZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdh
c21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYx
RDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxh
bi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdG
NDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zNzg3LDYgKzM3ODksOCBAQAogCQk1MkMwNjExRDFBQTUxRTFC
MDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAv
KiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIg
LyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYz
MDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTAyLDYgKzc5MDYsOCBA
QAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMzksNiArODI0NSw3IEBACiAJ
CQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENvbGxlY3Rp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5
ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNTAsNiArMTAzNTcsNyBAQAogCQkJCUE1MDNGQTE5
MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAw
QUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1NzA2REUx
MThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTIs
NiArODkyLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
ICAgICBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXZWJBc3NlbWJseTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB3ZWJBc3NlbWJseVByb3RvdHlwZSkpOwogICAgICAg
ICBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fd2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRlKHZt
LCB0aGlzLCBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIldlYkFz
c2VtYmx5IiksIHdlYkFzc2VtYmx5LCBEb250RW51bSk7CiAKQEAgLTEyNzIsNiArMTI3Myw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBwdWJsaWM6
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0
cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKIApAQCAtNjEyLDYgKzYxMyw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBT
dHJ1Y3R1cmUqIHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBl
bnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogCiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsCiAK
LSAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlw
ZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBlLAogICAgIE1heEpTVHlwZSA9IDBiMTExMTExMTEs
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDYgKzk0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZDYWxsZWVzKCkpOwogICAgIH0KIAorICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJG
b3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbXBvcnRJbmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV93YXNtRXhpdFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8
V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMzcx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzOSw4NSArMTAzOSwxNjUgQEAgdm9pZCBCM0lSR2VuZXJhdG9y
OjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogCiBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUlu
dGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAg
QmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQ0NhbGxIZWxwZXJzJiBq
aXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIAotICAgIE9yaWdpbiBv
cmlnaW47CisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKLSAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZmdW5jdGlvbi5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgcHJvYywgb3JpZ2luLCBibG9jayk7CisgICAgLy8gRklYTUUgU3RvcCB1
c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24g
PSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmZnVuY3Rpb24uanNUb1dhc21DYWxsZWVNb3ZlTG9j
YXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxs
ZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlOworICAg
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgdG9TYXZlLnNldChwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyKTsK
KyAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgIHRvU2F2ZS5zZXQocmVnSW5mby5zaXplUmVnaXN0
ZXIpOwogCisgICAgdW5zaWduZWQgdG9TYXZlU2l6ZSA9IHRvU2F2ZS5udW1iZXJPZlNldEdQUnMo
KTsKICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBi
ZSBndWFyYW50ZWVkIGJ5IG91ciBKUyB3cmFwcGVyIHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4K
LSAgICAgICAgLy8gSnVzdCBwcmV2ZW50IGFnYWluc3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5h
YmxlZC4KLSAgICAgICAgVmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwotICAgICAgICBWYWx1ZSog
b2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBvcmlnaW4sCi0gICAgICAgICAgICBibG9jay0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRP
ZkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxlZSBz
YXZlcy4KKyAgICAgICAgdG9TYXZlLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICAgICAgQVNTRVJUKHRvU2F2ZS5udW1iZXJPZlNldEdQUnMoKSA9PSB0b1Nh
dmVTaXplKTsKKyAgICB9CiAKLSAgICAgICAgVmFsdWUqIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9
IGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBvcmlnaW4sIHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1Nw
aWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBv
aW50ZXJCYXNlZCk7CisgICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCi0gICAgICAgIENoZWNrVmFsdWUqIGFyZ3Vt
ZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ss
IG9yaWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3Zl
LCBvcmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3VudCwgYXJndW1lbnRDb3VudCkpOworICAgIHVu
c2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yo
dm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVh
ZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBS
cyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUtPmFyZ3VtZW50KGkpKSB7
CisgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAg
ICAgICAgIGlmIChudW1HUFJzID49IHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsK
KyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICBpZiAobnVt
RlBScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAr
K251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgYXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQu
YnJlYWtwb2ludCgpOwotICAgICAgICB9KTsKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsK
KyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90YWxGcmFtZVNp
emUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2Ug
c2F2ZSBhbGwgdGhlc2UgcmVnaXN0ZXJzIHJlZ2FyZGxlc3Mgb2YgaGF2aW5nIGEgbWVtb3J5IG9y
IG5vdC4KKyAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgd2UgdXNlIG9uZSBvZiB0aGVzZSBhcyBh
IHNjcmF0Y2guIFRoYXQgc2FpZCwKKyAgICAvLyBhbG1vc3QgYWxsIHJlYWwgd2FzbSBwcm9ncmFt
cyB1c2UgbWVtb3J5LCBzbyBpdCdzIG5vdCByZWFsbHkKKyAgICAvLyB3b3J0aCBvcHRpbWl6aW5n
IGZvciB0aGUgY2FzZSB0aGF0IHRoZXkgZG9uJ3QuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVn
IHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0
ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CiAg
ICAgfQogCi0gICAgLy8gRklYTUUgVGhlIGluc3RhbmNlIGlzIGN1cnJlbnRseSBzZXQgYnkgdGhl
IEMrKyBjb2RlIGluIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGwuIFdlIHNob3VsZG4ndCBnbyB0
aHJvdWdoIHRoZSBleHRyYSBDKysgaG9vcC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NjQ4NgotICAgIFZhbHVlKiBpbnN0YW5jZSA9IGJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLAotICAgICAg
ICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0udG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlKSk7Ci0gICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUodm0sIGluZm8ubWVtb3J5LCBpbnN0YW5jZSwgcHJvYywgYmxvY2spOwotCi0gICAgLy8gR2V0
IG91ciBhcmd1bWVudHMuCi0gICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOwotICAgIGpzY0Nh
bGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIHByb2MsIGJsb2NrLCBv
cmlnaW4sIFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGFyZ3VtZW50KTsKLSAgICB9KTsKLQotICAgIC8vIE1vdmUgdGhlIGFyZ3VtZW50
cyBpbnRvIHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5zZXR1cENhbGwocHJvYywgYmxvY2ssIG9yaWdpbiwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWdu
YXR1cmUtPnJldHVyblR5cGUoKSksIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7
Ci0gICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCogY29udGV4dCA9ICZjb21waWxhdGlvbkNvbnRl
eHQ7Ci0KLSAgICAgICAgLy8gd2FzbSAtPiB3YXNtIGNhbGxzIGNsb2JiZXIgcGlubmVkIHJlZ2lz
dGVycyB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgSlMgLT4gd2FzbSB0cmFuc2l0aW9uIG11c3QgdGhl
cmVmb3JlIHJlc3RvcmUgdGhlc2UgcGlubmVkIHJlZ2lzdGVycyAod2hpY2ggYXJlIHVzdWFsbHkg
Y2FsbGVlLXNhdmVkKSB0byBhY2NvdW50IGZvciB0aGlzLgotICAgICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKLSAg
ICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7Ci0gICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVk
UmVncy0+c2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVS
ZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7CisgICAgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7
CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhl
IHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0
aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAg
ICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAg
ICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICog
c2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNh
c2UgV2FzbTo6STMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAg
ICAgaWYgKG51bUdQUnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBX
YXNtOjpJMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0
Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywg
Y2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5h
cmd1bWVudChpKSA9PSBXYXNtOjpJMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNP
ZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
bG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
anNPZmZzZXQpLCB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3By
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK251bUdQUnM7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAg
ICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
d2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdh
c21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3
YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMy
KQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW2NvbnRleHRdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVv
Zih2b2lkKik7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmpzRW50cnlwb2lu
dFRvV2FzbUVudHJ5cG9pbnRDYWxsID0gY2FsbDsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAg
aWYgKCEhaW5mby5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICBqaXQubG9hZFB0cigmdm0udG9wSlNXZWJB
c3NlbWJseUluc3RhbmNlLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUo
KSA+PSAxKTsKKyAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhl
IGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vi
c2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6
b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1l
bW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBqaXQuYWRk
NjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAg
fQorCisgICAgY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRD
YWxsID0gaml0LmNhbGwoKTsKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVn
QXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyByZWcgPSByZWdB
dE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZz
ZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KIAotICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSkgewotICAgIGNhc2UgV2FzbTo6Vm9pZDoKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4pOwotICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgaml0Lm1vdmVGbG9hdFRvMzIoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgIHJlc3VsdCA9IGJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdHdpc2VDYXN0LCBvcmlnaW4sIHJlc3VsdCk7Ci0gICAgICAgIEZBTExUSFJP
VUdIOwotICAgIGNhc2UgV2FzbTo6STMyOgotICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICBi
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIG9yaWdpbiwgcmVz
dWx0KTsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2FzbTo6RnVuYzoKLSAgICBjYXNlIFdhc206OkFu
eWZ1bmM6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0g
ICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MpOwotICAgIEIzOjpnZW5lcmF0ZShwcm9j
LCAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVCk7Ci0gICAgY29tcGlsYXRpb25D
b250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCk7
Ci0gICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBw
cm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKKyAgICBqaXQucmV0KCk7CiB9CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+
JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgdW5zaWdu
ZWQgb3B0TGV2ZWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDYgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9CiAgICAgdm9p
ZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIqIGNhbGxlZU1v
dmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSBy
ZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMTM3
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNzEsNiArNzMsMzYgQEAgQUxXQVlTX0lOTElORSB1aW50OF90
KiBnZXRXYXNtQnVmZmVyRnJvbQogICAgIHJldHVybiBhcnJheUJ1ZmZlclZpZXcgPyBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXJWaWV3LT52ZWN0b3IoKSkgOiBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oYXJyYXlCdWZmZXItPmltcGwoKS0+ZGF0YSgpKTsKIH0KIAorQUxXQVlTX0lOTElO
RSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBKU09iamVjdCogb2JqZWN0
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCit7CisgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHModm0sIFdlYkFzc2VtYmx5RnVuY3Rpb246OmluZm8oKSkpIHsKKyAgICAgICAgd2FzbUZ1bmN0
aW9uID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpOworICAgICAgICB3YXNt
V3JhcHBlckZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChvYmplY3QtPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
aW5mbygpKSkgeworICAgICAgICB3YXNtV3JhcHBlckZ1bmN0aW9uID0ganNDYXN0PFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKj4ob2JqZWN0KTsKKyAgICAgICAgd2FzbUZ1bmN0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworQUxXQVlTX0lOTElORSBib29sIGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24oVk0mIHZtLCBK
U1ZhbHVlIHZhbHVlLCBXZWJBc3NlbWJseUZ1bmN0aW9uKiYgd2FzbUZ1bmN0aW9uLCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiomIHdhc21XcmFwcGVyRnVuY3Rpb24pCit7CisgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzV2Vi
QXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwgd2FzbUZ1
bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKK30KKworCitBTFdBWVNfSU5MSU5FIGJvb2wg
aXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdW51c2VkOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiB1bnVzZWQyOworICAgIHJldHVybiBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZt
LCBvYmplY3QsIHVudXNlZCwgdW51c2VkMik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCShyZXZpc2lv
biAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3QKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
ICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKLSAgICBt
ZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9m
KFdyaXRlQmFycmllcjxKU0NlbGw+KSk7CisgICAgbWVtc2V0KGltcG9ydEZ1bmN0aW9ucygpLCAw
LCBtX251bUltcG9ydEZ1bmN0aW9ucyAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSk7
CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMTM3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsMTggKzYwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLmdldCgpOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+KiBp
bXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Piog
aW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaWR4IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOwogICAgICAgICByZXR1cm4gJmltcG9ydEZ1
bmN0aW9ucygpW2lkeF07CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4qIGltcG9y
dEZ1bmN0aW9ucygpCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25z
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2Vs
bD4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldEltcG9ydEZ1bmN0aW9uKFZNJiB2bSwgSlNDZWxsKiB2YWx1
ZSwgdW5zaWduZWQgaWR4KQorICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBKU09i
amVjdCogdmFsdWUsIHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIGltcG9ydEZ1bmN0aW9u
KGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAkocmV2aXNp
b24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDExIEBAIEpTV2ViQXNzZW1i
bHlUYWJsZTo6SlNXZWJBc3NlbWJseVRhYmxlKFYKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUg
d29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29t
bWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0
LgogICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+Ojpt
YWxsb2Moc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKLSAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxX
ZWJBc3NlbWJseUZ1bmN0aW9uPj46Om1hbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2Vt
Ymx5RnVuY3Rpb24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7CisgICAgbV9qc0Z1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obV9zaXplKSk7
CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKSB7CiAgICAgICAgIG5l
dyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7CiAgICAg
ICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpT
aWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBj
b2RlLgotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8
V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1bmN0aW9ucy5nZXQo
KVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KIH0KIApAQCAtMTA2LDExICsx
MDYsMTEgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgbgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXYXNtOjpD
YWxsYWJsZUZ1bmN0aW9uKSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwotICAgIG1f
anNGdW5jdGlvbnMucmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+KSAqIHN0YXRpY19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOworICAgIG1fanNGdW5jdGlvbnMu
cmVhbGxvYyhzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG5ld1NpemUpKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1Np
emU7ICsraSkgewogICAgICAgICBuZXcgKCZtX2Z1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbigpOwotICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4oKTsKKyAgICAgICAgbmV3ICgmbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIH0KICAgICBt
X3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJv
b2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IG4KIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpjbGVhckZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0
KClbaW5kZXhdID0gV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKICAgICBBU1NFUlQobV9mdW5j
dGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiB9CkBAIC0x
MzEsNiArMTMxLDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYK
ICAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKGZ1
bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpLCBmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQoKSk7CiB9
CiAKK3ZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90
IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgIG1fanNGdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4
XSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCksIGZ1
bmN0aW9uLT53YXNtRW50cnlwb2ludCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjEzNzE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNs
dWRlIDx3dGYvTWFsbG9jUHRyLmg+CiAKQEAgLTUwLDEzICs1MSwxNCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW11
bTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBi
b29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQorICAgIEpTT2JqZWN0
KiBnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdLmdldCgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5k
ZXgpOwogICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1i
bHlGdW5jdGlvbiopOworICAgIHZvaWQgc2V0RnVuY3Rpb24oVk0mLCB1aW50MzJfdCBpbmRleCwg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwg
bV9zaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0K
QEAgLTc0LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVG
dW5jdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgTWFsbG9jUHRyPFdyaXRlQmFycmllcjxXZWJBc3Nl
bWJseUZ1bmN0aW9uPj4gbV9qc0Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8V3JpdGVCYXJyaWVy
PEpTT2JqZWN0Pj4gbV9qc0Z1bmN0aW9uczsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBt
X21heGltdW07CiAgICAgdWludDMyX3QgbV9zaXplOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCkBAIC0xMjksMTUgKzEzMCwyMyBAQCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuCiAgICAgICAgICAgICBpZiAo
IXZhbHVlLmlzRnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkpOwogCi0gICAgICAgICAgICBKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU09iamVjdCo+KHZhbHVlKTsKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4
cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6Ci0gICAgICAgICAgICBpZiAoV2ViQXNzZW1i
bHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnQgPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2VsbCkpIHsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdh
c21GdW5jdGlvbjsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNt
V3JhcHBlckZ1bmN0aW9uOworICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rp
b24odm0sIGZ1bmN0aW9uLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAg
ICAgICAgICAgICAgICAgLy8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNo
IHRoZSBzaWduYXR1cmUgb2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAg
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9
IGltcG9ydGVkRXhwb3J0LT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IGltcG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICAgICAg
aWYgKHdhc21GdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJ
bmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIC8v
IGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCisgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tpbXBvcnQua2luZEluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1
cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFT
Q0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0
aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOwotICAgICAg
ICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lzZToKICAgICAgICAgICAgIC8vIGEuIExl
dCBjbG9zdXJlIGJlIGEgbmV3IGhvc3QgZnVuY3Rpb24gb2YgdGhlIGdpdmVuIHNpZ25hdHVyZSB3
aGljaCBjYWxscyB2IGJ5IGNvZXJjaW5nIFdlYkFzc2VtYmx5IGFyZ3VtZW50cyB0byBKYXZhU2Ny
aXB0IGFyZ3VtZW50cyB2aWEgVG9KU1ZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQsIGlmIGFu
eSwgYnkgY29lcmNpbmcgdmlhIFRvV2ViQXNzZW1ibHlWYWx1ZS4KQEAgLTE0Niw3ICsxNTUsNyBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuCiAgICAgICAgICAgICAv
LyBOb3RlOiBhZGRpbmcgdGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBj
bG9zdXJlIHJlcXVpcmVtZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdp
bCBiZSBrZXB0IGFsaXZlKSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KIAogICAgICAg
ICAgICAgQVNTRVJUKG51bUltcG9ydEZ1bmN0aW9ucyA9PSBpbXBvcnQua2luZEluZGV4KTsKLSAg
ICAgICAgICAgIGluc3RhbmNlLT5zZXRJbXBvcnRGdW5jdGlvbih2bSwgY2VsbCwgbnVtSW1wb3J0
RnVuY3Rpb25zKyspOworICAgICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9uKHZt
LCBmdW5jdGlvbiwgbnVtSW1wb3J0RnVuY3Rpb25zKyspOwogICAgICAgICAgICAgLy8gdi4gQXBw
ZW5kIGNsb3N1cmUgdG8gaW1wb3J0cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50Lmgi
CisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgpAQCAtMTEwLDE5ICsxMTEsMjYgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgLy8gICBpLiBJ
ZiB0aGVyZSBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGZ1bmMgaW4gZnVu
Y3Mgd2hvc2UgZnVuYy5bW0Nsb3N1cmVdXSBlcXVhbHMgYywgdGhlbiByZXR1cm4gZnVuYy4KICAg
ICAgICAgICAgIC8vICAgaWkuIChOb3RlOiBBdCBtb3N0IG9uZSB3cmFwcGVyIGlzIGNyZWF0ZWQg
Zm9yIGFueSBjbG9zdXJlLCBzbyBmdW5jIGlzIHVuaXF1ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVs
dGlwbGUgb2NjdXJyYW5jZXMgaW4gdGhlIGxpc3QuIE1vcmVvdmVyLCBpZiB0aGUgaXRlbSB3YXMg
YW4gaW1wb3J0IHRoYXQgaXMgYWxyZWFkeSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2Jq
ZWN0LCB0aGVuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3Qgd2lsbCBiZSBmb3VuZC4gRm9y
IGltcG9ydHMgdGhhdCBhcmUgcmVndWxhciBKUyBmdW5jdGlvbnMsIGEgbmV3IHdyYXBwZXIgd2ls
bCBiZSBjcmVhdGVkLikKICAgICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgZnVuY3Rpb25J
bXBvcnRDb3VudCkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCByZS1leHBv
cnRpbmcgYW4gaW1wb3J0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NTEwCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4ID0gZXhwLmtpbmRJbmRleDsKKyAg
ICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oZnVuY3Rpb25JbmRleCktPmdldCgpOworICAgICAgICAgICAgICAgIGlmIChpc1dl
YkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpCisgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbkltcG9ydDsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25JbXBv
cnQsIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jaywgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gICBpaWku
IE90aGVyd2lzZToKKyAgICAgICAgICAgICAgICAvLyAgICAgYS4gTGV0IGZ1bmMgYmUgYW4gRXhw
b3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdCBjcmVhdGVkIGZyb20gYy4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCisgICAgICAgICAgICAgICAgLy8g
ICAgIGMuIFJldHVybiBmdW5jLgorICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAg
ICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAu
ZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBv
aW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1
ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gICBpaWkuIE90aGVy
d2lzZToKLSAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBGdW5j
dGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgotICAgICAgICAgICAgLy8gICAgIGIu
IEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgotICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5j
LgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0g
Y29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5r
aW5kSW5kZXgpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUq
IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAg
ICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6OlRhYmxlOiB7CkBAIC0xODQsNyAr
MTkyLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAg
ICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNp
Z25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwogICAgICAgICBpZiAoc3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UgPCBjb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSkgewot
ICAgICAgICAgICAgSlNDZWxsKiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0
aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKS0+Z2V0KCk7CisgICAgICAgICAgICBKU09iamVj
dCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwg
dGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2Up
OwpAQCAtMjQxLDE0ICsyNDksMjggQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdAogICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxlbWVudC5mdW5jdGlvbklu
ZGljZXNbaV07CisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IGNvZGVCbG9j
ay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1ZNUmFuZ2VFcnJv
cihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiRWxlbWVudCBpcyBzZXR0aW5nIHRoZSB0YWJs
ZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBGSVhN
RS4iKSkpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBq
c0Nhc3Q8SlNPYmplY3QqPihtX2luc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4
KS0+Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5j
dGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5
RnVuY3Rpb24qPih2bSwgZnVuY3Rpb25JbXBvcnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UgZXZlciBpbXBvcnQgYSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgd2Ugc2V0
IHRoZSBpbXBvcnQgYXMgdGhlIHVud3JhcHBlZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEJlY2F1c2UgYSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiBjYW4gbmV2ZXIgd3Jh
cCBhbm90aGVyIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIG9ubHkgdHlwZSB0aGlzIGNvdWxkIGJlIGlzIFdlYkFzc2VtYmx5RnVuY3Rp
b24uCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3YXNtRnVuY3Rpb24p
OworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJsZUlu
ZGV4LCB3YXNtRnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgKyt0YWJsZUluZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5k
ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb25JbXBvcnQsIGZ1
bmN0aW9uSW5kZXgsIGNvZGVCbG9jaywgc2lnbmF0dXJlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgKyt0YWJsZUluZGV4OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0Vu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0
dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAg
ICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBp
bmRleCAwLgogICAgICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhl
IHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KQEAgLTI4OCw3ICszMTAsNyBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoSlNDZWxsKiBzdGFydEZ1bmN0aW9uID0gbV9zdGFydEZ1bmN0aW9uLmdldCgpKSB7Cisg
ICAgaWYgKEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gbV9zdGFydEZ1bmN0aW9uLmdldCgpKSB7
CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoc3RhcnRGdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICBjYWxs
KHN0YXRlLCBzdGFydEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCks
IHN0YXRlLT5lbXB0eUxpc3QoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDIxMzcx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgIFdyaXRlQmFy
cmllcjxKU0NlbGw+IG1fc3RhcnRGdW5jdGlvbjsKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IG1fc3RhcnRGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNyArMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eQogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0
aW9uKiByZXN1bHQgPSB0YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQorICAgIGlmIChKU09iamVj
dCogcmVzdWx0ID0gdGFibGUtPmdldEZ1bmN0aW9uKGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpOwogfQpAQCAtMTIwLDggKzEyMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHkKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uKj4odm0sIHZhbHVlKTsKLSAgICBpZiAoIXZhbHVlLmlzTnVsbCgpICYmICFmdW5j
dGlvbikgeworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbjsKKyAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKyAgICBpZiAoIXZh
bHVlLmlzTnVsbCgpICYmICFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCB2YWx1ZSwgd2Fz
bUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLAogICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIHRoZSBz
ZWNvbmQgYXJndW1lbnQgdG8gYmUgbnVsbCBvciBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5G
dW5jdGlvbiIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMzksOCArMTQwLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHkKICAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCiAgICAgICAgIHRhYmxlLT5jbGVhckZ1bmN0aW9uKGluZGV4KTsKICAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKCEhZnVuY3Rpb24pOwotICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24o
dm0sIGluZGV4LCBmdW5jdGlvbik7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5pc09iamVjdCgpICYm
IGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwg
d2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9uKSk7CisgICAgICAgIEFTU0VSVCghIXdh
c21GdW5jdGlvbiB8fCAhIXdhc21XcmFwcGVyRnVuY3Rpb24pOworICAgICAgICBpZiAod2FzbUZ1
bmN0aW9uKQorICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCBpbmRleCwgd2FzbUZ1
bmN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZt
LCBpbmRleCwgd2FzbVdyYXBwZXJGdW5jdGlvbik7CiAgICAgfQogICAgIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkZ1
bmN0aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pIH07CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qPih2bSwgZXhlYy0+anNDYWxsZWUoKSk7CisgICAgaWYgKCF3YXNt
RnVuY3Rpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJs
eSBmdW5jdGlvbiIpKSk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU09iamVjdCog
ZnVuY3Rpb24gPSB3YXNtRnVuY3Rpb24tPmZ1bmN0aW9uKCk7CisgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsK
KyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIEFyZ0xpc3Qo
ZXhlYykpKTsKK30KKworV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCB2b2lk
KiB3YXNtRW50cnlwb2ludENvZGUpCisgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKKyAgICAsIG1fd2FzbUVudHJ5cG9pbnRDb2RlKHdhc21FbnRyeXBvaW50Q29kZSkKKyAg
ICAsIG1fc2lnbmF0dXJlSW5kZXgoc2lnbmF0dXJlSW5kZXgpCit7IH0KKworV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZnVuY3Rpb24sIHVuc2ln
bmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoIWZ1bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246Omlu
Zm8oKSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIp
OworICAgIFN0cmluZyBuYW1lID0gIiI7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5v
SW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7
CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmVJbmRleCwgY29kZUJs
b2NrLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSk7CisgICAgY29uc3Qg
V2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0s
IGV4ZWN1dGFibGUsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwg
Y29kZUJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVjdCog
ZnVuY3Rpb24sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChKU1ZhbHVlKGZ1bmN0aW9uKS5pc0Z1bmN0aW9uKCkpOworICAgIG1fZnVuY3Rp
b24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CisgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlz
LCBjb2RlQmxvY2spOworfQorCitTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9jb2RlQmxvY2spOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fZnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTRnVuY3Rpb24gQmFzZTsKKworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1
cmVJbmRleDsgfQorICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50
cnlwb2ludENvZGU7IH0KKyAgICBKU09iamVjdCogZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0
aW9uLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U09iamVjdCosIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSk7CisKKyAgICAv
LyBXZSBrZWVwIGEgcmVmZXJlbmNlIHRvIG91ciBDb2RlQmxvY2sgYmVjYXVzZSB3ZSBoYXZlIGEg
cmF3CisgICAgLy8gcG9pbnRlciB0byBhc20gY29kZSB0aGF0IGl0IG93bnMuCisgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrOworICAgIFdyaXRlQmFy
cmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKKyAgICB2b2lkKiBtX3dhc21FbnRyeXBvaW50Q29k
ZTsKKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCg==
</data>
<flag name="commit-queue"
          id="325675"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304091</attachid>
            <date>2017-03-10 16:18:33 -0800</date>
            <delta_ts>2017-03-10 18:04:40 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>62589</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM3MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAzLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBNYWtlIG1vcmUgZGVtb3MgcnVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1p
bGxlci4KKworICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGV4cG9ydC5kZWZh
dWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNlY3Rpb25CdWlsZGVycy5jb25zdC5zZWN0
aW9uLmluLldBU00uZGVzY3JpcHRpb24uc2VjdGlvbi5zd2l0Y2guc2VjdGlvbi5jYXNlLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLnRoaXMuc2VjdGlvbik6CisgICAgICAgICogd2FzbS9qcy1hcGkvd3Jh
cHBlci1mdW5jdGlvbi5qczogQWRkZWQuCisgICAgICAgIChleHBvcnRJbXBvcnQpOgorICAgICAg
ICAocmV0dXJuLm5ldy5XZWJBc3NlbWJseS5Nb2R1bGUpOgorICAgICAgICAoYXNzZXJ0LnRocm93
cy5tYWtlSW5zdGFuY2UpOgorICAgICAgICAoYXNzZXJ0LnRocm93cy5CYXIpOgorICAgICAgICAo
YXNzZXJ0LnRocm93cyk6CisKIDIwMTctMDMtMDkgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtFU25leHRdIEltcGxlbWVudCBPYmplY3QgUmVzdCAtIEltcGxl
bWVudGluZyBPYmplY3QgUmVzdCBEZXN0cnVjdHVyaW5nCkluZGV4OiBKU1Rlc3RzL3dhc20vQnVp
bGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkocmV2aXNpb24g
MjEzNzE3KQorKysgSlNUZXN0cy93YXNtL0J1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3
OSw3ICs1NzksMTAgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgIkVsZW1lbnQiOgotICAgICAgICAgICAg
ICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0aGlzW3Nl
Y3Rpb25dID0gZnVuY3Rpb24oLi4uYXJncykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
cy5sZW5ndGggIT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IllvdSdyZSBkb2luZyBpdCB3cm9uZy4gVGhpcyBlbGVtZW50IGRvZXMgbm90IHRha2UgYXJndW1l
bnRzLiBZb3UgbXVzdCBjaGFpbiB0aGUgY2FsbCB3aXRoIGFub3RoZXIgRWxlbWVudCgpIik7CisK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRCdWlsZGVyID0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLApJbmRleDogSlNUZXN0cy93YXNtL2pzLWFw
aS93cmFwcGVyLWZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkv
d3JhcHBlci1mdW5jdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBp
L3dyYXBwZXItZnVuY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKK2lt
cG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CisKKworZnVuY3Rpb24gZXhwb3J0SW1wb3J0KHR5cGUpIHsKKyAg
ICBsZXQgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZiIsIHR5cGUp
CisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhw
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZnVuYyIsIHttb2R1bGU6ICJpbXAiLCBmaWVs
ZDogImYifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkuRW5kKCk7CisgICAgcmV0
dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsK
K30KKworeworICAgIGxldCB0eXBlID0geyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfTsK
KyAgICBsZXQgbW9kdWxlID0gZXhwb3J0SW1wb3J0KHR5cGUpOworICAgIGxldCBjYWxsZWQgPSBm
YWxzZTsKKyAgICBsZXQgZm9vID0gKGkpID0+IHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGkgKyA0MjsKKyAgICB9OworICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmOiBmb299fSk7CisgICAgYXNzZXJ0LnRy
dXRoeShpbnN0YW5jZS5leHBvcnRzLmZ1bmMgIT09IGZvbyk7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7IGkrKykgeworICAgICAgICBsZXQgcjEgPSBpbnN0YW5jZS5leHBvcnRzLmZ1bmMo
aSk7CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgICAgIGxldCByMiA9IGZvbyhpKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7Cisg
ICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgbGV0IGJ1
aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7
cGFyYW1zOiBbXX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigp
LkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpLkVuZCgpOworICAgICAgICBsZXQgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBub3QgdHlwZSBjaGVjay4KKyAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZjogaW5zdGFu
Y2UuZXhwb3J0cy5mdW5jfX0pLCBXZWJBc3NlbWJseS5MaW5rRXJyb3IsICJpbXBvcnRlZCBmdW5j
dGlvbidzIHNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBm
dW5jdGlvbidzIHNpZ25hdHVyZSIpOworICAgIH0KKworfQorCit7CisgICAgY29uc3QgdGFibGVE
ZXNjcmlwdGlvbiA9IHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDJ9OworICAgIGZ1bmN0
aW9uIG1ha2VJbnN0YW5jZSh0eXBlLCBpbXApIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5l
dyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVuYyhb
ImkzMiJdLCAiaTMyIikKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkz
MiIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmMSIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDoiaTMy
In0pCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZjIiLCB7cGFyYW1zOiBbImkz
MiIsICJpMzIiXSwgcmV0OiJpMzIifSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVsZW1l
bnQoKQorICAgICAgICAgICAgICAgIC5FbGVtZW50KHtvZmZzZXQ6IDAsIGZ1bmN0aW9uSW5kaWNl
czogWzAsIDFdfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMSkKKyAgICAgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3Qo
MCwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAg
ICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
ICAgICAuRW5kKCk7CisgICAgICAgIGxldCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbXApOworICAgIH0KKworICAgIGZ1bmN0aW9uIEJhcigp
e307CisgICAgbm9JbmxpbmUoQmFyKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0
IGZvbyA9IChpKSA9PiB7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgIG5ldyBCYXI7
CisgICAgICAgIHJldHVybiBpKjQyOworICAgIH0KKyAgICBsZXQgdGFibGUgPSBuZXcgV2ViQXNz
ZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAgbGV0IGluc3QgPSBtYWtlSW5zdGFu
Y2Uoe3BhcmFtczpbJ2kzMiddLCByZXQ6ImkzMiJ9LCB7aW1wOiB7ZjE6IGZvbywgZjI6Zm9vLCB0
YWJsZX19KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBs
ZXQgcjEgPSBpbnN0LmV4cG9ydHMuZm9vKDAsIGkpOworICAgICAgICBhc3NlcnQudHJ1dGh5KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBsZXQgcjIgPSBmb28oaSk7
CisgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3QuZXhwb3J0
cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8g
YSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOworICAgICAgICBhc3NlcnQudHJ1dGh5
KCFjYWxsZWQpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewor
ICAgICAgICBsZXQgcjEgPSB0YWJsZS5nZXQoMCkoaSk7CisgICAgICAgIHRhYmxlLnNldCgwLCB0
YWJsZS5nZXQoMCkpOyAvLyBqdXN0IG1ha2Ugc3VyZSBzZXR0aW5nIGEgd3JhcHBlciBmdW5jdGlv
biB3b3Jrcy4KKyAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAgICAgICBjYWxsZWQg
PSBmYWxzZTsKKyAgICAgICAgbGV0IHIyID0gdGFibGUuZ2V0KDEpKGkpOworICAgICAgICBhc3Nl
cnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgICAgICBhc3Nl
cnQuZXEocjEsIHIyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxldCBuZXh0SW5zdCA9IG1h
a2VJbnN0YW5jZSh7cGFyYW1zOlsnaTMyJ10sIHJldDoiaTMyIn0sIHtpbXA6IHtmMTogdGFibGUu
Z2V0KDApLCBmMjppbnN0LmV4cG9ydHMuZm9vLCB0YWJsZX19KTsKKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCByMSA9IG5leHRJbnN0LmV4
cG9ydHMuZm9vKDAsIGkpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShjYWxsZWQpOworICAg
ICAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgcjIgPSBmb28oaSk7Cisg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGFzc2VydC5lcShyMSwgcjIpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gbmV4dEluc3QuZXhwb3J0cy5mb28oMSwgaSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRj
aCIpOworICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgICAgICBsZXQg
cjEgPSB0YWJsZS5nZXQoMSkoMCwgaSk7CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KGNhbGxl
ZCk7CisgICAgICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCByMiA9IGZv
byhpKTsKKyAgICAgICAgICAgIGFzc2VydC50cnV0aHkoY2FsbGVkKTsKKyAgICAgICAgICAgIGNh
bGxlZCA9IGZhbHNlOworICAgICAgICAgICAgYXNzZXJ0LmVxKHIxLCByMik7CisgICAgICAgIH0K
KyAgICB9Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzcxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw4MyBAQAorMjAxNy0wMy0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJBc3NlbWJseTogTWFrZSBtb3JlIGRlbW9zIHJ1bgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTc2MDMxMD4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBhbm90aGVyIFdhc20gZGVtbyBydW46CisgICAg
ICAgIGh0dHBzOi8va3JpcGtlbi5naXRodWIuaW8vQmFuYW5hQnJlYWQvY3ViZTIvYmIuaHRtbAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0d28gYnVnczoKKyAgICAgICAgMS4g
V2hlbiBXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSB3YXMgYWRkZWQsIHdlIGRpZCBub3QgcHJvcGVy
bHkKKyAgICAgICAgdXBkYXRlIHRoZSBsYXN0IEpTIHR5cGUgdmFsdWUuCisgICAgICAgIDIuIE91
ciBjb2RlIGZvciBvdXIgSlMgLT4gV2FzbSBlbnRyeXBvaW50IHdhcyB3cm9uZy4gSXQgbGVhZCB0
byBiYWQKKyAgICAgICAgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIHdvdWxkIGVtaXQgQjMgdGhh
dCB3b3VsZCB3cml0ZSBvdmVyIHIxMgorICAgICAgICBhbmQgcmJ4IChvbiB4ODYpIHdoaWNoIGlz
IGludmFsaWQgc2luY2UgdGhvc2UgYXJlIG91ciBwaW5uZWQgcmVnaXN0ZXJzLgorICAgICAgICBU
aGlzIHBhdGNoIGp1c3QgcmV3cml0ZXMgdGhlIGVudHJ5cG9pbnQgdG8gdXNlIGhhbmQgd3JpdHRl
biBhc3NlbWJsZXIKKyAgICAgICAgY29kZS4gSSB3YXMgcGxhbm5pbmcgb24gZG9pbmcgdGhpcyBh
bnl3YXlzIGJlY2F1c2UgaXQncyBhIGNvbXBpbGUKKyAgICAgICAgdGltZSBzcGVlZCBib29zdC4K
KyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzb21l
IG5ldyBBUEkgZmVhdHVyZXM6CisgICAgICAgIFdlIGNhbiBub3cgZXhwb3J0IGFuIGltcG9ydCwg
ZWl0aGVyIHZpYSBhIGRpcmVjdCBleHBvcnQsIG9yIHZpYSBhIFRhYmxlIGFuZCB0aGUKKyAgICAg
ICAgRWxlbWVudCBzZWN0aW9uLiBJJ3ZlIGFkZGVkIGEgbmV3IGNsYXNzIGNhbGxlZCBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiB0aGF0CisgICAgICAgIGp1c3Qgd3JhcHMgb3ZlciBhIEpTT2Jq
ZWN0IHRoYXQgaXMgYSBmdW5jdGlvbi4gV3JhcHBlciBmdW5jdGlvbnMgaGF2ZSB0eXBlcworICAg
ICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbSwgc28gaWYgdGhleSdyZSByZS1pbXBvcnRlZCwgb3Ig
Y2FsbGVkIHZpYSBjYWxsX2luZGlyZWN0LAorICAgICAgICB0aGV5IGNhbiBiZSB0eXBlIGNoZWNr
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp3ZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
aDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg6Cisg
ICAgICAgIChKU0M6OmlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6aW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OmltcG9ydEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
c2V0SW1wb3J0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1
bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjYWxsV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6ZnVuY3Rpb24pOgorCiAyMDE3LTAz
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQjMgc2hvdWxk
IGhhdmUgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBhdG9taWMgb3BlcmF0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjEzNzE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Njcs
NiArOTY3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQ
cm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseVRvSlNDYWxsZWUuY3BwCisgICAg
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKIAogICAgIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCiAgICAgeWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTMxMiw2ICsxMzEyLDggQEAKIAkJNTJDMDYxMUYxQUE1MUUxQzAw
QjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkM5NTJC
NzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlw
ZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTJDOTUyQjkxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFD
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLzsgfTsKKwkJNTJGNkMzNUQxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi87IH07CisJCTUyRjZDMzVFMUU3MUVC
MDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNEND
IC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTMxMzc0QkQxRDVDRTY3NjAwQUY3QTBCIC8qIFdh
c21QbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLzsgfTsKIAkJNTMxMzc0QkYx
RDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxh
bi5jcHAgKi87IH07CiAJCTUzM0IxNURGMURDN0Y0NjMwMDRENTAwQSAvKiBXYXNtT3BzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdG
NDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zNzg3LDYgKzM3ODksOCBAQAogCQk1MkMwNjExRDFBQTUxRTFC
MDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkY2QzM1QjFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRo
ID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAv
KiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtUGxhbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIg
LyogV2FzbVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYz
MDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
YXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTAyLDYgKzc5MDYsOCBA
QAogCQkJCUFEMkZDQkMzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmggKi8sCiAJCQkJQURCQzU0RDIxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZS5jcHAgKi8sCiAJCQkJQURCQzU0RDMxREY4RUEwMDAwNUJGNzM4IC8qIFdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZS5oICovLAorCQkJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNTJGNkMzNUMxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
IGpzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyMzksNiArODI0NSw3IEBACiAJ
CQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENvbGxlY3Rp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5
ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmluZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNTAsNiArMTAzNTcsNyBAQAogCQkJCUE1MDNGQTE5
MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUxMjIwMjgxQkU3RjU5MTAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MkY2QzM1RDFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAw
QUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1NzA2REUx
MThBMkJDRjAwNTdGODhGIC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTIs
NiArODkyLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
ICAgICBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXZWJBc3NlbWJseTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB3ZWJBc3NlbWJseVByb3RvdHlwZSkpOwogICAgICAg
ICBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnNldCh2bSwgdGhpcywgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAgIG1fd2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSk7CiAgICAgICAgIGF1dG8qIHdlYkFzc2VtYmx5ID0gSlNXZWJBc3NlbWJseTo6Y3JlYXRlKHZt
LCB0aGlzLCBtX3dlYkFzc2VtYmx5U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIldlYkFz
c2VtYmx5IiksIHdlYkFzc2VtYmx5LCBEb250RW51bSk7CiAKQEAgLTEyNzIsNiArMTI3Myw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25TdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBwdWJsaWM6
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseVN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0
cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9S
X1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKIApAQCAtNjEyLDYgKzYxMyw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBT
dHJ1Y3R1cmUqIHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBl
bnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogCiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsCiAK
LSAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlw
ZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBlLAogICAgIE1heEpTVHlwZSA9IDBiMTExMTExMTEs
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDYgKzk0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsg
b2Zmc2V0T2ZDYWxsZWVzKCkpOwogICAgIH0KIAorICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJG
b3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbXBvcnRJbmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV93YXNtRXhpdFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
ayhWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8
V2FzbTo6V2FzbUV4aXRTdHVicz4mJiwgV2FzbTo6TWVtb3J5OjpNb2RlLCB1bnNpZ25lZCBjYWxs
ZWVDb3VudCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMzcx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzOSw4NSArMTAzOSwxNjUgQEAgdm9pZCBCM0lSR2VuZXJhdG9y
OjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogCiBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUlu
dGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAg
QmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQ0NhbGxIZWxwZXJzJiBq
aXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIAotICAgIE9yaWdpbiBv
cmlnaW47CisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKLSAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZmdW5jdGlvbi5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgcHJvYywgb3JpZ2luLCBibG9jayk7CisgICAgLy8gRklYTUUgU3RvcCB1
c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzMjEKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24g
PSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIqIGxpbmtlZENhbGxlZU1vdmUgPSAmZnVuY3Rpb24uanNUb1dhc21DYWxsZWVNb3ZlTG9j
YXRpb247CisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihjYWxs
ZWVNb3ZlTG9jYXRpb24pOworICAgIH0pOworCisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlOworICAg
IGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgdG9TYXZlLnNldChwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyKTsK
KyAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlcnMpCisgICAgICAgIHRvU2F2ZS5zZXQocmVnSW5mby5zaXplUmVnaXN0
ZXIpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIHRvU2F2ZVNpemUgPSB0
b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCk7CisgICAgLy8gVGhleSBzaG91bGQgYWxsIGJlIGNhbGxl
ZSBzYXZlcy4KKyAgICB0b1NhdmUuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworICAgIEFTU0VSVCh0b1NhdmUubnVtYmVyT2ZTZXRHUFJzKCkgPT0gdG9TYXZlU2l6
ZSk7CisjZW5kaWYKIAotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIC8vIFRo
aXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIEpTIHdyYXBwZXIgdGhhdCBoYW5kbGVzIGNh
bGxzIHRvIHVzLgotICAgICAgICAvLyBKdXN0IHByZXZlbnQgYWdhaW5zdCBjcmF6eSB3aGVuIEFT
U0VSVCBpcyBlbmFibGVkLgotICAgICAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAg
ICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6
ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIFZhbHVlKiBhcmd1bWVudENvdW50ID0gYmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbiwKLSAgICAgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgb3JpZ2luLCBmcmFtZVBvaW50
ZXIsIG9mZlNldE9mQXJndW1lbnRDb3VudCkpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJl
Z2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5
cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKKyAgICBmdW5jdGlvbi5qc1RvV2FzbUVudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CiAKLSAgICAgICAgVmFsdWUq
IGV4cGVjdGVkQXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBvcmlnaW4sIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsK
KyAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJ
bkJ5dGVzKCk7CisgICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
OworICAgIHVuc2lnbmVkIG51bUdQUnMgPSAwOworICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsg
aSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSkgeworICAgICAg
ICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBp
ZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7CisgICAgICAg
ICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1GUFJz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIENo
ZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1
ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKLSAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEFib3ZlLCBvcmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3VudCwgYXJndW1lbnRD
b3VudCkpOworICAgIHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOworICAgIGppdC5zdWJQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgYXJndW1lbnRDb3VudENoZWNrLT5z
ZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICB9KTsK
KyAgICAvLyBXZSBzYXZlIGFsbCB0aGVzZSByZWdpc3RlcnMgcmVnYXJkbGVzcyBvZiBoYXZpbmcg
YSBtZW1vcnkgb3Igbm90LgorICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCB3ZSB1c2Ugb25lIG9m
IHRoZXNlIGFzIGEgc2NyYXRjaC4gVGhhdCBzYWlkLAorICAgIC8vIGFsbW9zdCBhbGwgcmVhbCB3
YXNtIHByb2dyYW1zIHVzZSBtZW1vcnksIHNvIGl0J3Mgbm90IHJlYWxseQorICAgIC8vIHdvcnRo
IG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgdGhleSBkb24ndC4KKyAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAg
ICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LnN0b3JlUHRy
KHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBv
ZmZzZXQpKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRSBUaGUgaW5zdGFuY2UgaXMgY3VycmVudGx5
IHNldCBieSB0aGUgQysrIGNvZGUgaW4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbC4gV2Ugc2hv
dWxkbid0IGdvIHRocm91Z2ggdGhlIGV4dHJhIEMrKyBob29wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDg2Ci0gICAgVmFsdWUqIGluc3RhbmNlID0gYmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2lu
KCksCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZ2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKLSAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZSh2bSwgaW5mby5tZW1vcnksIGluc3RhbmNlLCBwcm9jLCBibG9jayk7Ci0K
LSAgICAvLyBHZXQgb3VyIGFyZ3VtZW50cy4KLSAgICBWZWN0b3I8VmFsdWUqPiBhcmd1bWVudHM7
Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZSwgcHJv
YywgYmxvY2ssIG9yaWdpbiwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVkKSB7Ci0gICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwotICAgIH0pOwotCi0gICAgLy8gTW92ZSB0
aGUgYXJndW1lbnRzIGludG8gcGxhY2UuCi0gICAgVmFsdWUqIHJlc3VsdCA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgb3JpZ2luLCBhcmd1bWVudHMsIHRv
QjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSwgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQpIHsKLSAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0KiBjb250ZXh0ID0gJmNvbXBp
bGF0aW9uQ29udGV4dDsKLQotICAgICAgICAvLyB3YXNtIC0+IHdhc20gY2FsbHMgY2xvYmJlciBw
aW5uZWQgcmVnaXN0ZXJzIHVuY29uZGl0aW9uYWxseS4gVGhpcyBKUyAtPiB3YXNtIHRyYW5zaXRp
b24gbXVzdCB0aGVyZWZvcmUgcmVzdG9yZSB0aGVzZSBwaW5uZWQgcmVnaXN0ZXJzICh3aGljaCBh
cmUgdXN1YWxseSBjYWxsZWUtc2F2ZWQpIHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOwotICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKLSAgICAgICAgY2xvYmJlcnMu
c2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKLSAgICAgICAgZm9yIChhdXRvIGlu
Zm8gOiBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzKQotICAgICAgICAgICAgY2xvYmJlcnMuc2V0
KGluZm8uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICBu
dW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7CisgICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbworICAgICAgICAvLyB3
ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJv
dmUuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKKworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQgKiBzaXplb2Yodm9pZCopOworICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyBp
KyspIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSkgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAg
ICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dw
ckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3Vt
ZW50KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoc2Ny
YXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2Yodm9p
ZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
aWduYXR1cmUtPmFyZ3VtZW50KGkpID09IFdhc206OkkzMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1H
UFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tu
dW1HUFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbnVt
R1BSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMy
OgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUZQ
UnMgPj0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSA9
PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zm
c2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbY29udGV4dF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAganNPZmZz
ZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgY29udGV4dC0+
anNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwgPSBjYWxsOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9y
eSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIGppdC5sb2FkUHRyKCZ2
bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIGJhc2VNZW1vcnkpOworICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIGNvbnN0IGF1dG8m
IHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3Muc2l6ZSgpID49IDEpOworICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6
ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50VG9XYXNt
RW50cnlwb2ludENhbGwgPSBqaXQuY2FsbCgpOworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVn
IHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0
T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQogCi0g
ICAgLy8gUmV0dXJuIHRoZSByZXN1bHQsIGlmIG5lZWRlZC4KICAgICBzd2l0Y2ggKHNpZ25hdHVy
ZS0+cmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBXYXNtOjpWb2lkOgotICAgICAgICBibG9jay0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEIzOjpSZXR1cm4sIG9yaWdpbik7Ci0gICAgICAg
IGJyZWFrOwogICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBqaXQubW92ZUZsb2F0VG8zMihG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIFdhc206OkY2NDoKLSAgICAgICAgcmVzdWx0ID0gYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIG9yaWdpbiwgcmVzdWx0KTsKLSAgICAg
ICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgY2FzZSBXYXNtOjpJNjQ6
Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgQjM6OlJldHVybiwg
b3JpZ2luLCByZXN1bHQpOworICAgICAgICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXYXNtOjpGdW5jOgotICAgIGNh
c2UgV2FzbTo6QW55ZnVuYzoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAKLSAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYyk7Ci0gICAgQjM6Omdl
bmVyYXRlKHByb2MsICpjb21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50SklUKTsKLSAgICBj
b21waWxhdGlvbkNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2MucmVsZWFzZUJ5
cHJvZHVjdHMoKTsKLSAgICBmdW5jdGlvbi5qc1RvV2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IHByb2MuY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKIH0KIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZt
LCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWdu
YXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRp
Y2VzLCB1bnNpZ25lZCBvcHRMZXZlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCShyZXZpc2lvbiAyMTM3MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBwcml2YXRlOgogICAgIH0KIAogcHVibGljOgorICAg
IHN0YXRpYyB1bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7
IH0KICAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
ciogY2FsbGVlTW92ZUxvY2F0aW9uLCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9y
aWdpbiwgQjM6OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAgc3RhdGlj
X2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVy
U2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw2ICs3MywzNiBAQCBBTFdBWVNfSU5M
SU5FIHVpbnQ4X3QqIGdldFdhc21CdWZmZXJGcm9tCiAgICAgcmV0dXJuIGFycmF5QnVmZmVyVmll
dyA/IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOwogfQogCitB
TFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qJiB3YXNtRnVuY3Rpb24sIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKiYgd2FzbVdyYXBwZXJGdW5jdGlvbikKK3sKKyAgICBpZiAob2Jq
ZWN0LT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlGdW5jdGlvbjo6aW5mbygpKSkgeworICAgICAg
ICB3YXNtRnVuY3Rpb24gPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KG9iamVjdCk7Cisg
ICAgICAgIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjppbmZvKCkpKSB7CisgICAgICAgIHdhc21XcmFwcGVyRnVuY3Rpb24gPSBqc0Nh
c3Q8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qPihvYmplY3QpOworICAgICAgICB3YXNtRnVu
Y3Rpb24gPSBudWxscHRyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlv
bihWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIFdlYkFzc2VtYmx5RnVuY3Rpb24qJiB3YXNtRnVuY3Rp
b24sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiYgd2FzbVdyYXBwZXJGdW5jdGlvbikKK3sK
KyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwganNDYXN0PEpTT2JqZWN0Kj4odmFs
dWUpLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pOworfQorCisKK0FMV0FZU19J
TkxJTkUgYm9vbCBpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB1bnVzZWQ7CisgICAgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIHVudXNlZDI7CisgICAgcmV0dXJuIGlzV2ViQXNzZW1ibHlIb3N0
RnVuY3Rpb24odm0sIG9iamVjdCwgdW51c2VkLCB1bnVzZWQyKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAJKHJldmlzaW9uIDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpKU1dlYkFzc2VtYmx5SW5zdAogICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMobnVtSW1wb3J0RnVuY3Rpb25z
KQogewotICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwgMCwgbV9udW1JbXBvcnRGdW5jdGlv
bnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pKTsKKyAgICBtZW1zZXQoaW1wb3J0RnVu
Y3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9mKFdyaXRlQmFycmllcjxK
U09iamVjdD4pKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9u
IDIxMzcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxOCArNjAsMTggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVy
PEpTQ2VsbD4qIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKKyAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpZHgpCiAgICAgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChpZHggPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7CiAgICAgICAgIHJldHVy
biAmaW1wb3J0RnVuY3Rpb25zKClbaWR4XTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPiogaW1wb3J0RnVuY3Rpb25zKCkKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KiBpbXBv
cnRGdW5jdGlvbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8SlNDZWxsPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9ucygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb25zKCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0SW1wb3J0RnVuY3Rpb24oVk0mIHZtLCBK
U0NlbGwqIHZhbHVlLCB1bnNpZ25lZCBpZHgpCisgICAgdm9pZCBzZXRJbXBvcnRGdW5jdGlvbihW
TSYgdm0sIEpTT2JqZWN0KiB2YWx1ZSwgdW5zaWduZWQgaWR4KQogICAgIHsKICAgICAgICAgaW1w
b3J0RnVuY3Rpb24oaWR4KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
Y3BwCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAg
SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVgogICAgIC8vIEZJWE1FOiBJ
dCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRlIG1heGltdW0gaGVyZS4gVGhl
IHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBCdXQgZm9yIG5vdywgd2UncmUgbm90
IGRvaW5nIHRoYXQuCiAgICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVG
dW5jdGlvbj46Om1hbGxvYyhzaXplb2YoV2FzbTo6Q2FsbGFibGVGdW5jdGlvbikgKiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1fc2l6ZSkpOwotICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3Jp
dGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+Pjo6bWFsbG9jKHNpemVvZihXcml0ZUJhcnJp
ZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3NpemUpKTsK
KyAgICBtX2pzRnVuY3Rpb25zID0gTWFsbG9jUHRyPFdyaXRlQmFycmllcjxKU09iamVjdD4+Ojpt
YWxsb2Moc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX3NpemUpKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsK
ICAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIFdhc206OkNhbGxhYmxlRnVuY3Rp
b24oKTsKICAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGlu
IGNvbXBpbGVkIGNvZGUuCi0gICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClbaV0pIFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgICAgICBuZXcgKCZtX2pzRnVu
Y3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAgICAgfQogfQogCkBA
IC0xMDYsMTEgKzEwNiwxMSBAQCBib29sIEpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyh1aW50MzJf
dCBuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fZnVuY3Rpb25zLnJlYWxsb2Moc2l6
ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXpl
KSk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlGdW5jdGlvbj4pICogc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdTaXplKSk7CisgICAgbV9q
c0Z1bmN0aW9ucy5yZWFsbG9jKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIHN0YXRp
Y19jYXN0PHNpemVfdD4obmV3U2l6ZSkpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gbV9zaXpl
OyBpIDwgbmV3U2l6ZTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ld
KSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMu
Z2V0KClbaV0pIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPigpOworICAgICAgICBu
ZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAg
ICAgfQogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTksNyAr
MTE5LDcgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3Qgbgogdm9pZCBK
U1dlYkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgIG1fanNGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdID0gV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+KCk7CisgICAgbV9qc0Z1
bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAgICAgbV9m
dW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwogICAgIEFT
U0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2ln
bmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29k
ZS4KIH0KQEAgLTEzMSw2ICsxMzEsMTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1
bmN0aW9uKFZNJgogICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206OkNhbGxhYmxl
RnVuY3Rpb24oZnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCksIGZ1bmN0aW9uLT53YXNtRW50cnlw
b2ludCgpKTsKIH0KIAordm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2
bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgbV9qc0Z1bmN0aW9u
cy5nZXQoKVtpbmRleF0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CisgICAgbV9mdW5jdGlvbnMu
Z2V0KClbaW5kZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihmdW5jdGlvbi0+c2lnbmF0dXJl
SW5kZXgoKSwgZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lv
biAyMTM3MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYWxsb2NQdHIuaD4KIApAQCAtNTAsMTMgKzUxLDE0IEBAIHB1
YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhpbXVtOyB9CiAgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogICAgIGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZ2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCisg
ICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90IGluZGV4KQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX3NpemUpOwogICAgICAgICByZXR1cm4gbV9qc0Z1bmN0
aW9ucy5nZXQoKVtpbmRleF0uZ2V0KCk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1
aW50MzJfdCBpbmRleCk7CiAgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQzMl90IGluZGV4
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisgICAgdm9pZCBzZXRGdW5jdGlvbihWTSYsIHVpbnQz
Ml90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiopOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseVRhYmxlLCBtX3NpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0
aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fZnVu
Y3Rpb25zKTsgfQpAQCAtNzQsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIE1hbGxvY1B0cjxXYXNt
OjpDYWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKLSAgICBNYWxsb2NQdHI8V3JpdGVCYXJy
aWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+PiBtX2pzRnVuY3Rpb25zOworICAgIE1hbGxvY1B0cjxX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+PiBtX2pzRnVuY3Rpb25zOwogICAgIHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1fbWF4aW11bTsKICAgICB1aW50MzJfdCBtX3NpemU7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTM3MTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUxp
bmtFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKQEAgLTEyOSwxNSAr
MTMwLDIzIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW4KICAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAKLSAgICAgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgSlNPYmplY3QqIGZ1
bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOwogICAgICAgICAgICAgLy8gaWkuIElm
IHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKLSAgICAgICAgICAgIGlm
IChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydCA9IGpzRHluYW1pY0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KHZtLCBjZWxsKSkgeworICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogd2FzbUZ1bmN0aW9uOworICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CisgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJs
eUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5j
dGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9l
cyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtF
cnJvci4KLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25h
dHVyZUluZGV4ID0gaW1wb3J0ZWRFeHBvcnQtPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKKyAgICAg
ICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnRl
ZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUlu
ZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlvbigpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBl
Y3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmIChpbXBv
cnRlZFNpZ25hdHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBmdW5jdGlvbidzIHNpZ25hdHVyZSBkb2Vz
bid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIp
KSk7Ci0gICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgogICAgICAgICAg
ICAgLy8gYS4gTGV0IGNsb3N1cmUgYmUgYSBuZXcgaG9zdCBmdW5jdGlvbiBvZiB0aGUgZ2l2ZW4g
c2lnbmF0dXJlIHdoaWNoIGNhbGxzIHYgYnkgY29lcmNpbmcgV2ViQXNzZW1ibHkgYXJndW1lbnRz
IHRvIEphdmFTY3JpcHQgYXJndW1lbnRzIHZpYSBUb0pTVmFsdWUgYW5kIHJldHVybnMgdGhlIHJl
c3VsdCwgaWYgYW55LCBieSBjb2VyY2luZyB2aWEgVG9XZWJBc3NlbWJseVZhbHVlLgpAQCAtMTQ2
LDcgKzE1NSw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogV2ViQXNzZW1ibHlJbnN0YW4KICAg
ICAgICAgICAgIC8vIE5vdGU6IGFkZGluZyB0aGUgSlNDZWxsIHRvIHRoZSBpbnN0YW5jZSBsaXN0
IGZ1bGZpbGxzIGNsb3N1cmUgcmVxdWlyZW1lbnRzIGIuIGFib3ZlICh0aGUgV2ViQXNzZW1ibHku
SW5zdGFuY2Ugd2lsIGJlIGtlcHQgYWxpdmUpIGFuZCB2LiBiZWxvdyAodGhlIEpTRnVuY3Rpb24p
LgogCiAgICAgICAgICAgICBBU1NFUlQobnVtSW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5k
SW5kZXgpOwotICAgICAgICAgICAgaW5zdGFuY2UtPnNldEltcG9ydEZ1bmN0aW9uKHZtLCBjZWxs
LCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0SW1wb3J0
RnVuY3Rpb24odm0sIGZ1bmN0aW9uLCBudW1JbXBvcnRGdW5jdGlvbnMrKyk7CiAgICAgICAgICAg
ICAvLyB2LiBBcHBlbmQgY2xvc3VyZSB0byBpbXBvcnRzLgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxMzcxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCkBAIC0xMTAsMTkgKzExMSwy
NiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAg
ICAvLyAgIGkuIElmIHRoZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Qg
ZnVuYyBpbiBmdW5jcyB3aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVy
biBmdW5jLgogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIg
aXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRo
ZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRo
ZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9u
IEV4b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJl
IGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcg
d3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQuKQogICAgICAgICAgICAgaWYgKGV4cC5raW5kSW5kZXgg
PCBmdW5jdGlvbkltcG9ydENvdW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgSW1wbGVt
ZW50IHJlLWV4cG9ydGluZyBhbiBpbXBvcnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU1MTAKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBleHAua2lu
ZEluZGV4OworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbkltcG9ydCA9IGluc3Rh
bmNlLT5pbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKKyAg
ICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVl
ID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyAgIGlpaS4gT3RoZXJ3aXNlOgorICAgICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVu
YyBiZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgor
ICAgICAgICAgICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KKyAgICAgICAg
ICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCisgICAgICAgICAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2Nr
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7CisgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZElu
ZGV4KTsKKyAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCksIGV4cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwg
d2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAg
IGlpaS4gT3RoZXJ3aXNlOgotICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4
cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCi0gICAgICAgICAg
ICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCi0gICAgICAgICAgICAvLyAgICAgYy4g
UmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9p
bnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IFdhc206
OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgm
dm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBq
c0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7
Ci0gICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6VGFibGU6IHsK
QEAgLTE4NCw3ICsxOTIsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTCiAgICAgICAgIEFTU0VSVCghc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAg
ICBBU1NFUlQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7CiAgICAgICAg
IGlmIChzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRD
b3VudCgpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKKyAgICAgICAg
ICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKHN0
YXJ0RnVuY3Rpb25JbmRleFNwYWNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rp
b24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSk7CkBAIC0yNDEsMTQgKzI0OSwyOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTUxMAogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVtZW50
LmZ1bmN0aW9uSW5kaWNlc1tpXTsKKyAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4
IDwgY29kZUJsb2NrLT5mdW5jdGlvbkltcG9ydENvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
Vk1SYW5nZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHNldHRp
bmcgdGhlIHRhYmxlIHZhbHVlIHdpdGggYW4gaW1wb3J0LiBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQuIEZJWE1FLiIpKSk7CisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlv
bkltcG9ydCA9IGpzQ2FzdDxKU09iamVjdCo+KG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uKGZ1
bmN0aW9uSW5kZXgpLT5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBmdW5jdGlvbkltcG9ydCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIGNh
biBuZXZlciB3cmFwIGFub3RoZXIgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgb25seSB0eXBlIHRoaXMgY291bGQgYmUgaXMgV2ViQXNz
ZW1ibHlGdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdh
c21GdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24o
dm0sIHRhYmxlSW5kZXgsIHdhc21GdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAr
K3RhYmxlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2
bSwgdGFibGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjpjcmVhdGUodm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlv
bkltcG9ydCwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCkpOworICAg
ICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2Fz
bUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwot
ICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9k
dWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0
IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNl
dCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgpAQCAtMjg4LDcgKzMxMCw3
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChKU0NlbGwqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24u
Z2V0KCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rp
b24uZ2V0KCkpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShzdGFydEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAg
ICAgICAgIGNhbGwoc3RhdGUsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgc3RhdGUtPmVtcHR5TGlzdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2
aXNpb24gMjEzNzE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Ci0g
ICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9zdGFydEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmll
cjxKU09iamVjdD4gbV9zdGFydEZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhYmxlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjEzNzE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHJlc3VsdCA9IHRhYmxlLT5nZXRGdW5jdGlvbihpbmRleCkpCisgICAg
aWYgKEpTT2JqZWN0KiByZXN1bHQgPSB0YWJsZS0+Z2V0RnVuY3Rpb24oaW5kZXgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiB9CkBAIC0xMjAsOCArMTIwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1l
bnQoMSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0
PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgdmFsdWUpOwotICAgIGlmICghdmFsdWUuaXNOdWxs
KCkgJiYgIWZ1bmN0aW9uKSB7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9u
OworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwor
ICAgIGlmICghdmFsdWUuaXNOdWxsKCkgJiYgIWlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0s
IHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCiAgICAgICAgICAgICBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4
cGVjdHMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBudWxsIG9yIGFuIGluc3RhbmNlIG9mIFdl
YkFzc2VtYmx5LkZ1bmN0aW9uIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEzOSw4ICsx
NDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseQogICAgIGlm
ICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5kZXgpOwog
ICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoISFmdW5jdGlvbik7Ci0gICAgICAgIHRhYmxlLT5z
ZXRGdW5jdGlvbih2bSwgaW5kZXgsIGZ1bmN0aW9uKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlz
T2JqZWN0KCkgJiYgaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwganNDYXN0PEpTT2JqZWN0
Kj4odmFsdWUpLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKTsKKyAgICAgICAg
QVNTRVJUKCEhd2FzbUZ1bmN0aW9uIHx8ICEhd2FzbVdyYXBwZXJGdW5jdGlvbik7CisgICAgICAg
IGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIGlu
ZGV4LCB3YXNtRnVuY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0YWJsZS0+c2V0
RnVuY3Rpb24odm0sIGluZGV4LCB3YXNtV3JhcHBlckZ1bmN0aW9uKTsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkVycm9yLmgiCisj
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb246OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbikgfTsKKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbio+KHZtLCBleGVjLT5qc0NhbGxlZSgpKTsKKyAg
ICBpZiAoIXdhc21GdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBh
IFdlYkFzc2VtYmx5IGZ1bmN0aW9uIikpKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
IEpTT2JqZWN0KiBmdW5jdGlvbiA9IHdhc21GdW5jdGlvbi0+ZnVuY3Rpb24oKTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1
bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5
cGU6Ok5vbmUpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgQXJnTGlzdChleGVjKSkpOworfQorCitXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgsIHZvaWQqIHdhc21FbnRyeXBvaW50Q29kZSkKKyAgICA6IEJhc2Uodm0sIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKQorICAgICwgbV93YXNtRW50cnlwb2ludENvZGUod2FzbUVudHJ5cG9p
bnRDb2RlKQorICAgICwgbV9zaWduYXR1cmVJbmRleChzaWduYXR1cmVJbmRleCkKK3sgfQorCitX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVC
bG9jaywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCit7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzKHZtLCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6aW5mbygpKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIg
ZnVuY3Rpb24uIik7CisgICAgU3RyaW5nIG5hbWUgPSAiIjsKKyAgICBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxs
cHRyLCBuYW1lKTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhl
YXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUlu
ZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsK
KyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5hbWUs
IGZ1bmN0aW9uLCBjb2RlQmxvY2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24oKSk7Cisg
ICAgbV9mdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2NvZGVCbG9jay5z
ZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Cit9CisKK1N0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIEFTU0VSVChnbG9iYWxPYmplY3Qp
OworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9jayk7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9mdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lO
Rk87CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJB
c3NlbWJseUNvZGVCbG9jayosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwor
CisgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX3NpZ25hdHVyZUluZGV4OyB9CisgICAgdm9pZCogd2FzbUVudHJ5cG9pbnQoKSB7IHJldHVy
biBtX3dhc21FbnRyeXBvaW50Q29kZTsgfQorICAgIEpTT2JqZWN0KiBmdW5jdGlvbigpIHsgcmV0
dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworCitwcml2YXRl
OgorICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCwgdm9pZCogd2FzbUVudHJ5cG9pbnRDb2Rl
KTsKKworICAgIC8vIFdlIGtlZXAgYSByZWZlcmVuY2UgdG8gb3VyIENvZGVCbG9jayBiZWNhdXNl
IHdlIGhhdmUgYSByYXcKKyAgICAvLyBwb2ludGVyIHRvIGFzbSBjb2RlIHRoYXQgaXQgb3ducy4K
KyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOworICAgIHZvaWQqIG1fd2FzbUVu
dHJ5cG9pbnRDb2RlOworICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>