<?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>170135</bug_id>
          
          <creation_ts>2017-03-27 13:31:06 -0700</creation_ts>
          <short_desc>WebAssembly: JSWebAssemblyCallee should not be a JSCell</short_desc>
          <delta_ts>2017-04-04 15:24:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>169773</dependson>
    
    <dependson>170185</dependson>
          <blocked>170136</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291590</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 13:31:06 -0700</bug_when>
    <thetext>This will make PIC easier.
However, in the future, when we move to a baseline compilation, we need to find a way to throw away baseline code while it&apos;s executing in parallel in multiple workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291594</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-27 13:35:01 -0700</bug_when>
    <thetext>I think this is done in bug #169773?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291595</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 13:39:15 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #1)
&gt; I think this is done in bug #169773?

That patch does not make callee not a JSCell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291746</commentid>
    <comment_count>3</comment_count>
      <attachid>305542</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 19:22:17 -0700</bug_when>
    <thetext>Created attachment 305542
WIP

Doesn&apos;t compile yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291750</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 19:29:11 -0700</bug_when>
    <thetext>I&apos;m also decoupling CCallHelpers/AssemblyHelpers from a VM in this patch. Any function that does VM-y things, will take a VM&amp; as a parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291768</commentid>
    <comment_count>5</comment_count>
      <attachid>305549</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 20:13:11 -0700</bug_when>
    <thetext>Created attachment 305549
WIP

Still doesn&apos;t compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291779</commentid>
    <comment_count>6</comment_count>
      <attachid>305555</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-27 20:31:44 -0700</bug_when>
    <thetext>Created attachment 305555
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293700</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 11:19:11 -0700</bug_when>
    <thetext>I think everything else is in place for this to happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293861</commentid>
    <comment_count>8</comment_count>
      <attachid>306124</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 15:27:55 -0700</bug_when>
    <thetext>Created attachment 306124
WIP

It&apos;s still crashing on some wasm tests.
I&apos;m re-writing the various runtime bits that wasm uses to make sure they don&apos;t use exec-&gt;vm() because that assumes we have a JSCell Callee</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293914</commentid>
    <comment_count>9</comment_count>
      <attachid>306143</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 17:11:20 -0700</bug_when>
    <thetext>Created attachment 306143
WIP

passes wasm tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293954</commentid>
    <comment_count>10</comment_count>
      <attachid>306152</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 18:38:46 -0700</bug_when>
    <thetext>Created attachment 306152
WIP

Catching an exception w/ web inspector open no longer crashes. But it still doesn&apos;t show any wasm frames. We should fix that soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293966</commentid>
    <comment_count>11</comment_count>
      <attachid>306157</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 19:26:42 -0700</bug_when>
    <thetext>Created attachment 306157
WIP

Almost done, just need to rename some files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293991</commentid>
    <comment_count>12</comment_count>
      <attachid>306164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-03 22:07:23 -0700</bug_when>
    <thetext>Created attachment 306164
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293992</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-03 22:09:29 -0700</bug_when>
    <thetext>Attachment 306164 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/interpreter/CallFrame.cpp:190:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/interpreter/CalleeBits.h:41:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmPlan.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/JavaScriptCore/wasm/WasmContext.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 47 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>1293998</commentid>
    <comment_count>14</comment_count>
      <attachid>306164</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-03 23:18:01 -0700</bug_when>
    <thetext>Comment on attachment 306164
patch

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

Some tests are sad. Looks good overall, thought I&apos;m not familiar with some of the code so it would be good to have another set of eyes looking.

&gt; Source/JavaScriptCore/jsc.cpp:3206
&gt; +    Vector&lt;Ref&lt;Wasm::Callee&gt;&gt; keepAlive;

It&apos;s not obvious what the difference is between these two from just their name. I know it&apos;s pre-existing, but still confusing IMO.

&gt; Source/JavaScriptCore/wasm/WasmCallee.cpp:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017

&gt; Source/JavaScriptCore/wasm/WasmCallee.h:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2017

&gt; Source/JavaScriptCore/wasm/WasmPlanInlines.h:43
&gt; +            return bitwise_cast&lt;void*&gt;(bitwise_cast&lt;uintptr_t&gt;(callee) | 1);

Could you keep the | 1 with the same code that does &amp; ~1 ? That would prevent it from ever diverging, or being missed in a copy-paste tragedy.

&gt; Source/JavaScriptCore/wasm/WasmThunks.cpp:76
&gt; +        // this since it is compiled with a constant VM pointer.) We could make the calling convetion

Typo &quot;convention&quot;

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:79
&gt; +    // These two callee getters are only valid once the fields have been polulated.

Typo &quot;populated&quot;

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.cpp:35
&gt; +const ClassInfo JSWebAssemblyRuntimeError::s_info = { &quot;WebAssembly.RuntimeError&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSWebAssemblyRuntimeError) };

The other two wasm error types were auto-generated together and should have the same position as here. I&apos;d rather update all or none.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294052</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-04-04 09:59:33 -0700</bug_when>
    <thetext>Looks like there are some 32 bit build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294079</commentid>
    <comment_count>16</comment_count>
      <attachid>306164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 11:08:23 -0700</bug_when>
    <thetext>Comment on attachment 306164
patch

Will work on 32-bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294092</commentid>
    <comment_count>17</comment_count>
      <attachid>306164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 11:47:45 -0700</bug_when>
    <thetext>Comment on attachment 306164
patch

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

&gt;&gt; Source/JavaScriptCore/jsc.cpp:3206
&gt;&gt; +    Vector&lt;Ref&lt;Wasm::Callee&gt;&gt; keepAlive;
&gt; 
&gt; It&apos;s not obvious what the difference is between these two from just their name. I know it&apos;s pre-existing, but still confusing IMO.

Ok. I&apos;ll name them better.

&gt;&gt; Source/JavaScriptCore/wasm/WasmCallee.h:2
&gt;&gt; + * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
&gt; 
&gt; 2017

Why? This file was &quot;svn mv&quot;ed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmPlanInlines.h:43
&gt;&gt; +            return bitwise_cast&lt;void*&gt;(bitwise_cast&lt;uintptr_t&gt;(callee) | 1);
&gt; 
&gt; Could you keep the | 1 with the same code that does &amp; ~1 ? That would prevent it from ever diverging, or being missed in a copy-paste tragedy.

Yeah definitely. Will fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294100</commentid>
    <comment_count>18</comment_count>
      <attachid>306184</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 12:08:54 -0700</bug_when>
    <thetext>Created attachment 306184
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294102</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-04 12:10:37 -0700</bug_when>
    <thetext>Attachment 306184 did not pass style-queue:


ERROR: Source/JavaScriptCore/interpreter/CallFrame.cpp:190:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/interpreter/CalleeBits.h:42:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 46 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>1294184</commentid>
    <comment_count>20</comment_count>
      <attachid>306184</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-04-04 14:30:27 -0700</bug_when>
    <thetext>Comment on attachment 306184
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294216</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-04 15:24:23 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/214905/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305542</attachid>
            <date>2017-03-27 19:22:17 -0700</date>
            <delta_ts>2017-03-27 20:13:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>147719</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ4MSw2ICsxNDgxLDcgQEAKIAkJNzk2NDY1NkExQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2
NUMyMTYxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xv
cmluZy5jcHAgKi87IH07CiAJCTc5NjVDMjE3MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk2REFBMkIxRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkRB
QTJBMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8q
IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OTdFMDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsg
fTsKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdF
MDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDAxMyw2ICs0
MDE0LDcgQEAKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTY1QzIxNDFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOyBwYXRoID0g
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmg7IHBhdGggPSBiMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGVlQml0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTcwMiw2ICs1
NzA0LDcgQEAKIAkJCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAg
Ki8sCiAJCQkJMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCAqLywKIAkJ
CQlBN0Y4NjkwRTBGOTU4NEExMDA1NTg2OTcgLyogQ2FjaGVkQ2FsbC5oICovLAorCQkJCTc5NkRB
QTJBMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggKi8sCiAJCQkJMTQyOUQ4REIwRUQy
MjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAv
KiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCkBAIC04ODExLDYgKzg4MTQsNyBAQAogCQkJCTc5QjE3
ODhFMUQzOTlCODAwMEIxQTU2NyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlBRjBCRTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMDIxQkZCRTU2MTAwMzhCQkNBIC8qIEpJVE11bEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk2REFBMkIxRTg5Q0NENjAwNURGMjRBIC8q
IENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1
OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTREMTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZD
MDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgQ29tcGlsYXRpb24gY29tcGlsZShWTSYgdm0sIFBy
b2NlZHVyZSYgcAogICAgIAogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MsIG9wdExldmVs
KTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2
bSwgaml0LCBudWxscHRyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEzNCw3ICsxMzEzNCw3IEBAIHZvaWQgdGVzdEVudHJ5U3dp
dGNoU2ltcGxlKCkKICAgICAKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jKTsKICAgICAK
LSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdl
bmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBu
dWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkBAIC0xMzE2Nyw3ICsxMzE2Nyw3IEBA
IHZvaWQgdGVzdEVudHJ5U3dpdGNoTm9FbnRyeVN3aXRjaCgpCiAgICAgCiAgICAgcHJlcGFyZUZv
ckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkp
OwpAQCAtMTMyNTQsNyArMTMyNTQsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25Q
YXRocygpCiAgICAgCiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0
ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwpAQCAtMTMzNzEsNyArMTMzNzEsNyBAQCB2b2lk
IHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgcHJlcGFyZUZv
ckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkp
OwpAQCAtMTM0NDksNyArMTM0NDksNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaExvb3AoKQogICAg
IAogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MpOwogICAgIAotICAgIENDYWxsSGVscGVy
cyBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50
cnlwb2ludExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVz
dGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0
YWlyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBWTSogdm07CiBz
dGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlKEIzOjpQcm9jZWR1cmUmIHBy
b2MpCiB7CiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYy5jb2RlKCkpOwotICAgIENDYWxs
SGVscGVycyBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJv
Yy5jb2RlKCksIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxs
cHRyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNyArNzY3LDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgaml0LnJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbm9FeGNlcHRpb24gPQotICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhD
Q2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgaml0LmVt
aXRFeGNlcHRpb25DaGVjayh2bSwgQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNr
KTsKIAogICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmVt
aXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgaml0LnJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4
Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNl
cHRpb25DaGVjayh2bSwgQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwogICAgICAg
ICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKQEAgLTk1OSw3
ICs5NTksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAg
ICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFz
dC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0CiAgICAgICAgICAgICAvLyB3aGF0ZXZl
ciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2Ug
dG8gYnJhbmNoIHRvIHNsb3cKICAgICAgICAgICAgIC8vIHBhdGguCi0gICAgICAgICAgICBqaXQu
bnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KHNjcmF0Y2hHUFIsIGJhc2VHUFIpOworICAg
ICAgICAgICAgaml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSh2bSwgc2NyYXRjaEdQ
UiwgYmFzZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IHN0cnVj
dHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSgpLT5pZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ET01KSVRBY2Nlc3NDYXNlUGF0
Y2hwb2ludFBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RPTUpJVEFjY2Vzc0Nhc2VQYXRjaHBvaW50UGFyYW1zLmNwcAkocmV2aXNpb24gMjE0
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RPTUpJVEFjY2Vzc0Nhc2VQ
YXRjaHBvaW50UGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGppdC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwogICAgICAgICBqaXQucmVj
bGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVy
dGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRp
b24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLm1fdm0sIENDYWxsSGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAKICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3Rl
cnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKICAgICAg
ICAgZXhjZXB0aW9ucy5hcHBlbmQoaml0Lmp1bXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NDIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNp
emVzQW5kQ3JhcwogI2VuZGlmCiAKICAgICB7Ci0gICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZt
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHZhbHVlOwogICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdmFsdWUpOwpAQCAtNjUsNyAr
NjUsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgfQog
CiAgICAgewotICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICAgICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLApAQCAtODIsNyArODIsNyBAQCB2b2lkIElubGluZUFj
Y2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgfQogCiAgICAgewotICAgICAgICBDQ2Fs
bEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAgICAg
aml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNB
bmRDcmFzCiAgICAgfQogCiAgICAgewotICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Cisg
ICAgICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAgICAgaml0LnBhdGNoYWJsZUJyYW5jaDMy
KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLApAQCAtMTA5LDcgKzEwOSw3
IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCkBAIC0xNTcsNyArMTU3LDcgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogCiBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlBY2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgQ0NhbGxI
ZWxwZXJzIGppdCgmdm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgR1BSUmVn
IGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAg
IEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CkBAIC0yMTUsNyArMjE1
LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogewogICAgIEFT
U0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOwog
Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
Uik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKQEAgLTI1
OSw3ICsyNTksNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiB7
CiAgICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CiAK
LSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlR1BS
KTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwpAQCAtMjgx
LDcgKzI4MSw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFYKIAog
dm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoVk0mIHZtLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkKIHsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0KCZ2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGF1dG8ganVtcCA9
IGppdC5qdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAgQ2FsbFNpdGVJbmRleCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6Om9yaQogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2Vw
dGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAgaml0LT5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgaml0LT5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1fdm0pOwogICAgIGlm
IChuZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsKICAgICAgICAgLy8gVG8g
dGhlIEpJVCB0aGF0IHByb2R1Y2VzIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gaGFuZGxpbmcKICAg
ICAgICAgLy8gY2FsbCBzaXRlLCB0aGV5IHdpbGwgZXhwZWN0IHRoZSBPU1IgZXhpdCB0byBiZSBh
cnJpdmVkCiAgICAgICAgIC8vIGF0IGZyb20gZ2VuZXJpY1Vud2luZC4gVGhlcmVmb3JlIHdlIG11
c3QgbW9kZWwgd2hhdCBnZW5lcmljVW53aW5kCiAgICAgICAgIC8vIGRvZXMgaGVyZS4gSS5lLCBz
ZXQgY2FsbEZyYW1lRm9yQ2F0Y2ggYW5kIGNvcHkgY2FsbGVlIHNhdmVzLgogCi0gICAgICAgIGpp
dC0+c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGppdC0+dm0oKS0+YWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CisgICAgICAgIGppdC0+c3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIG1fdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciA9
IGppdC0+anVtcCgpOwogCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5zZXJ0IGEgbmV3
IGV4Y2VwdGlvbiBoYW5kbGVyIGluIHRoZSB0YWJsZQpAQCAtMTk1LDEzICsxOTUsMTMgQEAgdm9p
ZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdAogICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciwgb3JpZ2luYWxIYW5k
bGVyLm5hdGl2ZUNvZGUpOwogICAgICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aml0LT5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LT52bSgp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQtPnNldHVwQXJndW1l
bnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJDYWxsID0gaml0LT5jYWxsKCk7CiAgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9u
SGFuZGxlcigpOworICAgICAgICBqaXQtPmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIobV92bSk7CiAg
ICAgfQogfQogCkBAIC0zNTgsNyArMzU4LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5
bW9ycGhpY0FjY2VzcwogCiAgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2Nr
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0gJmpp
dDsKIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTIgKzE3NywxNCBAQCBwcml2
YXRlOgogfTsKIAogc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7Ci0gICAgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlKCkKLSAgICAgICAgOiBtX2NhbGN1bGF0ZWRSZWdpc3RlcnNGb3JDYWxsQW5k
RXhjZXB0aW9uSGFuZGxpbmcoZmFsc2UpCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlKFZNJiB2
bSkKKyAgICAgICAgOiBtX3ZtKHZtKSAKKyAgICAgICAgLCBtX2NhbGN1bGF0ZWRSZWdpc3RlcnNG
b3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc1RvUmVz
dG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKGZhbHNlKQogICAgICAgICAsIG1fY2FsY3VsYXRlZENh
bGxTaXRlSW5kZXgoZmFsc2UpCiAgICAgewogICAgIH0KKyAgICBWTSYgbV92bTsKICAgICBDQ2Fs
bEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iq
IGFsbG9jYXRvcjsKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRl
IHByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogSklUQ29t
cGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCi0gICAgOiBDQ2FsbEhlbHBlcnMoJmRmZy5t
X3ZtLCBkZmcubV9jb2RlQmxvY2spCisgICAgOiBDQ2FsbEhlbHBlcnMoZGZnLm1fY29kZUJsb2Nr
KQogICAgICwgbV9ncmFwaChkZmcpCiAgICAgLCBtX2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENv
ZGUoKSkpCiAgICAgLCBtX2Jsb2NrSGVhZHMoZGZnLm51bUJsb2NrcygpKQpAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICBpZiAo
IW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAg
ICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAot
ICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7
CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KnZtKCkpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxs
RnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwpAQCAtMTUzLDEzICsxNTMsMTMgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZQogI2VuZGlmCiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5r
UmVjb3JkKGNhbGwoKSwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwog
Ci0gICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgp
KTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0d28gYXJn
dW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKQEAgLTE3Miw3
ICsxNzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAjZW5k
aWYKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbCgpLCBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKSk7CiAKLSAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwor
ICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9CiB9CiAKQEAgLTI3
OCw3ICsyNzgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAg
ICAgCiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVj
b3JkLnNsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGxpbmtCdWZm
ZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAg
ICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLnNsb3dDYWxsKSksCiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnRhcmdl
dFRvQ2hlY2spKSwKQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
KCkKIAogICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWls
YWJsZSBpbiB0aGUgSlNTdGFjay4KICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5k
RXhpdCgpIC0gMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBi
cmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTb2Z0U3RhY2tM
aW1pdCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIEp1bXAgc3RhY2tPdmVyZmxvdyA9IGJyYW5j
aFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0
KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGgu
c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGUoKQogICAgIG1fc3BlY3VsYXRpdmUtPmNyZWF0ZU9TUkVudHJpZXMoKTsKICAgICBzZXRFbmRP
ZkNvZGUoKTsKIAotICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1
ZmZlcj4oKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
KyAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KCp2bSgp
LCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxp
bmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX3BsYW4u
ZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9w
bGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgTGFiZWwgZnJvbUFyaXR5Q2hlY2sodGhpcyk7CiAg
ICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGlu
IHRoZSBKU1N0YWNrLgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCkg
LSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgIEp1bXAgc3RhY2tPdmVyZmxvdyA9IGJyYW5jaFB0
cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkp
LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFi
b3ZlLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQ
UkluZm86OnJlZ1QxKTsKIAogICAgIC8vIE1vdmUgdGhlIHN0YWNrIHBvaW50ZXIgZG93biB0byBh
Y2NvbW1vZGF0ZSBsb2NhbHMKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQ
b2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIHNldEVuZE9mQ29kZSgpOwogCiAgICAg
Ly8gPT09IExpbmsgPT09Ci0gICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxM
aW5rQnVmZmVyPigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4o
KnZtKCksICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBp
ZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBtX2dyYXBoLm1f
cGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFw
aC5tX3BsYW4pOwogICAgICAgICByZXR1cm47CkBAIC00OTksNyArNDk5LDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBtX2ppdENvZGUtPnNocmlua1RvRml0KCk7
CiAgICAgY29kZUJsb2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAg
ICAgCi0gICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigo
bV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICBsaW5rQnVmZmVyLT5saW5rKG1fY2FsbEFyaXR5Rml4dXAsIEZ1bmN0
aW9uUHRyKCh2bSgpLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIAogICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsK
IApAQCAtNjI0LDExICs2MjQsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhjZXB0aW9uQ2hlY2so
KQogICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRp
b25Jbk1hY2hpbmVGcmFtZShtX3NwZWN1bGF0aXZlLT5tX2N1cnJlbnROb2RlLT5vcmlnaW4uZm9y
RXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7IAogICAgIGlmICh3aWxsQ2F0
Y2hFeGNlcHRpb24pIHsKICAgICAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXggPSBtX3NwZWN1bGF0
aXZlLT5tX291dE9mTGluZVN0cmVhbUluZGV4ID8gKm1fc3BlY3VsYXRpdmUtPm1fb3V0T2ZMaW5l
U3RyZWFtSW5kZXggOiBtX3NwZWN1bGF0aXZlLT5tX3N0cmVhbS0+c2l6ZSgpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRFeGNlcHRpb24gPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0
aW9uQ2hlY2soKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0g
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKCp2bSgpKTsKICAgICAgICAgLy8gV2UgYXNz
dW1lIGhlcmUgdGhhdCB0aGlzIGlzIGNhbGxlZCBhZnRlciBjYWxsT3BlYXJ0aW9uKCkvYXBwZW5k
Q2FsbCgpIGlzIGNhbGxlZC4KICAgICAgICAgYXBwZW5kRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0
KEV4Y2VwdGlvbkNoZWNrLCBzdHJlYW1JbmRleCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFu
ZGxlciwgbV9qaXRDb2RlLT5jb21tb24ubGFzdENhbGxTaXRlKCksIGhhZEV4Y2VwdGlvbik7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2soKnZtKCkpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBKSVRDb21waWxlcjo6cmVjb3JkQ2Fs
bFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0IENv
ZGVPcmlnaW4mIGNhbGxTaXRlQ29kZU9yaWdpbiwgdW5zaWduZWQgZXZlbnRTdHJlYW1JbmRleCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBleGNlcHRpb25DaGVja1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpCiAgICAgewotICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlv
bkNoZWNrKCkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFj
ay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSgpKSk7CiAgICAgfQogCiAgICAgLy8gQWRk
IGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNrIHRo
YXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgogICAgIHZvaWQgZmFzdEV4Y2Vw
dGlvbkNoZWNrKCkKICAgICB7Ci0gICAgICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CisgICAgICAg
IGNhbGxFeGNlcHRpb25GdXp6KCp2bSgpKTsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBw
ZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKICAgICB9
CiAgICAgCkBAIC0yNjgsNiArMjY4LDggQEAgcHVibGljOgogCiAgICAgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVybiBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjsgfQogCisgICAgVk0qIHZtKCkgeyByZXR1cm4gJm1fZ3JhcGgubV92
bTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
OwogICAgIApAQCAtMzAwLDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgVmVjdG9yPExh
YmVsPiBtX2Jsb2NrSGVhZHM7CiAKKwogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewogICAgICAg
ICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKICAgICAgICAgICAgIDogZmFzdENh
bGwoZmFzdENhbGwpCkBAIC0zNDIsNiArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTGFiZWwg
c2xvd1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9OworCiAgICAgCiAg
ICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkR2VuZXJhdG9yPiwgND4gbV9n
ZXRCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDggQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
IG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3ZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCiB7Ci0gICAgLy8gUHJvLWZvcm1hIHN0dWZmLgotICAgIGlmIChPcHRpb25zOjpwcmlu
dEVhY2hPU1JFeGl0KCkpIHsKLSAgICAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBk
ZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwotICAgICAgICBkZWJ1
Z0luZm8tPmNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOwotICAgICAgICBkZWJ1Z0luZm8t
PmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9
IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICBtX2pp
dC5kZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJ
bmZvKTsKLSAgICB9Ci0gICAgCiAgICAgLy8gUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4g
VGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgogICAgIC8vIHN0YXJ0
cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMg
YWxyZWFkeSBtYWRlLgogICAgIApAQCAtMjU1LDcgKzI0NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBtX2ppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
KG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOwogCiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25I
YW5kbGVyKCkpCi0gICAgICAgIG1faml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgbV9qaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CiAKICAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQg
Y29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgogICAgIApA
QCAtNDAzLDcgKzM5Myw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKG1faml0LCBleGl0KTsKICAgICAKICAgICAv
LyBBbmQgZmluaXNoLgotICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChtX2ppdCwgZXhpdCk7Cisg
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBtX2ppdCwgZXhpdCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMjAgKzM4LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQs
IGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNv
dmVyeSogcmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoVk0mIHZt
LCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3Bl
cmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQogewogICAgIG1faml0LmppdEFz
c2VydFRhZ3NJblBsYWNlKCk7CiAKLSAgICAvLyBQcm8tZm9ybWEgc3R1ZmYuCi0gICAgaWYgKE9w
dGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVE
ZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87Ci0g
ICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7Ci0gICAgICAg
IGRlYnVnSW5mby0+a2luZCA9IGV4aXQubV9raW5kOwotICAgICAgICBkZWJ1Z0luZm8tPmJ5dGVj
b2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgCi0g
ICAgICAgIG1faml0LmRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLSAgICAKICAgICAvLyBQZXJmb3JtIHNwZWN1bGF0aW9u
IHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCiAg
ICAgLy8gc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0
aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCiAgICAgCkBAIC0yNjUsNyArMjU1LDcgQEAgdm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIG1faml0LmVtaXRNYXRlcmlh
bGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkKLSAgICAgICAgbV9qaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigpOworICAgICAgICBtX2ppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKIAogICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252
ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAgICAgCkBAIC0z
OTAsNyArMzgwLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMobV9qaXQsIGV4aXQpOwogCiAgICAgLy8gQW5kIGZp
bmlzaC4KLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQpOworICAgIGFkanVz
dEFuZEp1bXBUb1RhcmdldCh2bSwgbV9qaXQsIGV4aXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwxMyAr
MTQ2LDEzIEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBy
ZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3Zl
cnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwogCiAgICAgewotICAgICAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7
CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBleGl0Q29tcGlsZXIoaml0KTsKIAogICAgICAgICBp
ZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewogICAgICAgICAgICAgLy8gV2UgYXJl
IGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9t
IGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAgICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3Vy
IGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICBqaXQucmVzdG9yZUNh
bGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAg
ICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9y
Q2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAg
IGppdC5hZGRQdHIoCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291
bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBp
bGVFeGl0KGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CisgICAgICAgIGV4aXRDb21waWxlci5j
b21waWxlRXhpdCgqdm0sIGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAogICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBjb2RlQmxvY2spOwogICAgICAg
ICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDIxNDQyMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CisgICAgdm9pZCBjb21waWxlRXhpdChWTSYs
IGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYsIFNwZWN1bGF0
aW9uUmVjb3ZlcnkqKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRz
KGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBzdGF0aWMg
dm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKCZqaXQpOwogfQogCi12b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCit2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYg
ZXhpdCkKIHsKICAgICBqaXQubWVtb3J5RmVuY2UoKTsKICAgICAKQEAgLTMwOSw3ICszMDksNyBA
QCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmCiAgICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0g
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgaml0LnZtKCkt
PmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOworICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkp
OwogICAgIH0KICAgICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmLCBj
b25zdCBPU1JFeGl0QmFzZSYpOwogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVs
cGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci12b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChD
Q2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwordm9pZCBhZGp1c3RBbmRKdW1wVG9U
YXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+CiB2b2lkIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4
aXRDb21waWxlclRodW5rKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFZNKiB2bSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODM0LDcgKzE4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9n
aWNhbE5vdChOCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBib29sIG5lZ2F0ZVJlc3Vs
dCA9IHRydWU7Ci0gICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oYXJnMS5q
c1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1w
RlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVj
dCwgbmVnYXRlUmVzdWx0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVh
bigqbV9qaXQudm0oKSwgYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCks
IHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKICAgICAgICAgYm9vbGVhblJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk3OSw3
ICsxOTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogCiAg
ICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29s
ZWFuKHZhbHVlUmVncywgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVt
cEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgp
LCB2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBG
UFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIG5v
dFRha2VuKTsKICAgICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKIApAQCAtNTUzMCw3ICs1
NTMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHNjcmF0Y2gyLmdwcigpOwogCi0gICAgICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgICAg
ICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCptX2ppdC52bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgc2Nv
cGVSZWcgPSBzY29wZS5ncHIoKTsKQEAgLTU1NTIsNyArNTU1Miw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gy
KHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKIAot
ICAgICAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCgqbV9qaXQudm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOwogCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpz
VmFsdWVSZWdzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
OSw3ICsyNzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAg
ICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0Lmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFs
T2JqZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigp
KTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwg
cmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENv
bXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQ
UiwgcmVzdWx0R1BSKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTMz
NCw3ICszMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAg
ICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0Lmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFs
T2JqZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigp
KTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwg
cmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6
OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCB0YWtl
bik7CiAKQEAgLTE4NzYsNyArMTg3Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RPck90aGUKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAot
ICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCks
IHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKQEAgLTE5ODIsNyArMTk4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKICAg
ICAgICAgfQogICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1faml0
LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAg
ICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgpLCBKU1ZhbHVl
UmVncyhhcmcxR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUi5mcHIoKSwgdGVt
cEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmpl
Y3QsIG5lZ2F0ZVJlc3VsdCk7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMjcsNyArMjAy
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZUdQUiwgc3Ry
dWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
Km1faml0LnZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVz
ZSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIApAQCAtMjE1NSw3ICsyMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAKICAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAgICAgbV9qaXQuZW1p
dENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlc3VsdEdQUiwg
c2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRlbXBGUFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFs
dWVUb0Jvb2xlYW4oKm1faml0LnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwgdGVtcEZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwogICAgIAogICAgICAgICAgICAgYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKICAgICAgICAgICAg
IGp1bXAobm90VGFrZW4pOwpAQCAtNDExOCw3ICs0MTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFy
ZURhdGFHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFy
ZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkp
LCBpbmxpbmVDYXBhY2l0eUdQUik7CiAgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKLSAgICAgICAgbV9qaXQubXV0
YXRvckZlbmNlKCk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAK
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5l
Q2FwYWNpdHkoKSkpOwogICAgICAgICAKQEAgLTQxNDQsNyArNDE0NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGFsbG9jYXRvclB0ciksIGFsbG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OwogICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
KTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIAogICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsKICAgICAgICAgCkBAIC00NzQxLDcg
KzQ3NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5n
cHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVH
bG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbV9q
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5n
cHIoKSk7CisgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwg
dmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAg
ICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2Jq
ZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIH0K
QEAgLTU3MDIsNyArNTcwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNoYWRvd1BhY2tldCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHNoYWRvd1BhY2tldC5ncHIoKTsKIAotICAgICAgICBt
X2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tl
dCgqbV9qaXQudm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CkBAIC01NzI0LDcg
KzU3MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzaGFkb3dQYWNrZXQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzaGFk
b3dQYWNrZXRSZWcgPSBzaGFkb3dQYWNrZXQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CisgICAgICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZt
KCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBKU1ZhbHVlUmVncyB0aGlzUmVncyA9IEpTVmFsdWVSZWdzKHRoaXNWYWx1ZS5ncHIoKSk7CkBA
IC02MDA3LDcgKzYwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVO
ZXdBCiAgICAgCiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSLCBzbG93Q2FzZXMpOwogICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIG1f
aml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXpl
U2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJh
d09iamUKICAgICAKICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uoc3Rv
cmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAKLSAgICBtX2pp
dC5tdXRhdG9yRmVuY2UoKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0TGVuZ3RoKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgbGVuZ3RoR1BSLCBib29sIGluY2x1ZGVUaGlzKQpAQCAt
ODcyLDcgKzg3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8K
ICAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVt
cDIodGhpcyk7Ci0gICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoYmFzZVJlZywgdGVtcC5ncHIo
KSwgdGVtcDIuZ3ByKCkpOworICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgp
LCBiYXNlUmVnLCB0ZW1wLmdwcigpLCB0ZW1wMi5ncHIoKSk7CiAgICAgc3BlY3VsYXRpb25DaGVj
aygKICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyks
IG5vZGUsCiAgICAgICAgIG1faml0LmJyYW5jaFB0cigKQEAgLTE3NDUsNyArMTc0NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgKG1heUV4
aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQgfHwgbV9jdXJy
ZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAgICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCptX2ppdC52bSgpKTsKIAogICAgICAgICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBtX29y
aWdpbi5zZW1hbnRpYyk7CiAKQEAgLTMwODUsNyArMzA4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm8KICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgm
bV9qaXQpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHBlcmZvcm1EZWZhdWx0SGFzSW5zdGFu
Y2UgPSBtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihQcm94eU9iamVjdFR5cGUpKTsKLSAgICBtX2ppdC5lbWl0TG9hZFN0
cnVjdHVyZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHNjcmF0Y2hSZWcsIHNjcmF0Y2hSZWcsIHNj
cmF0Y2gyUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBDZWxsUGF5bG9hZE9mZnNl
dCksIHNjcmF0Y2hSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSW5zdGFuY2UgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoUmVnLCBwcm90b3R5
cGVSZWcpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MDIyLDcgKzQwMjIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAgfQogICAgIG1faml0LnN0b3Jl
MzIoYWxsb2NhdG9yR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTU3RyaW5n
OjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7Cisg
ICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKICAgICAKICAgICBzd2l0Y2ggKG51
bU9wR1BScykgewogICAgIGNhc2UgMjoKQEAgLTYzMjEsNyArNjMyMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRHbG9iYWxPYmoKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
YmplY3QodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUob2JqZWN0LmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBvYmplY3QuZ3ByKCksIHJlc3Vs
dC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KQEAg
LTY0NTAsNyArNjQ1MCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgU3Bl
Y3UKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5n
cmFwaCgpLCBleGVjdXRhYmxlKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRPZkV4ZWN1dGFibGUpKTsKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldE9mUmFyZURhdGEpKTsKICAgICAK
LSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0
LnZtKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24oTm9k
ZSogbm9kZSkKQEAgLTY2NTIsNyArNjY1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVBY3RpdmEKICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkpKSkpOwogICAgIH0KICAgICAK
LSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0
LnZtKCkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
QEAgLTY4MTUsNyArNjgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVE
aXJlY3QKICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KICAgICAgICAgCi0g
ICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52
bSgpKTsKICAgICAgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAt
NzAzOCw3ICs3MDM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2Rl
KgogICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BSKTsK
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKEpTRml4ZWRBcnJheTo6b2Zmc2V0T2ZE
YXRhKCkpLCBzY3JhdGNoMUdQUik7CiAKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFi
bGVTaXplZENlbGw8SlNGaXhlZEFycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQu
Z3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLm1fdm0uZml4ZWRBcnJheVN0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBz
bG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpT
Rml4ZWRBcnJheT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5n
cmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkubV92bS5maXhlZEFycmF5U3Ry
dWN0dXJlLmdldCgpKSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNs
b3dQYXRoKTsKICAgICAgICAgbV9qaXQuc3RvcmUzMihsZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGaXhlZEFycmF5OjpvZmZzZXRPZlNpemUoKSkpOwogCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKQEAgLTcwODAsNyArNzA4
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1f
aml0LnZtKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0
aW9uU3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIGFyZ3VtZW50KSk7CkBAIC03MzgyLDcgKzcz
ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShOCiAgICAgICAg
ICAgICBlbWl0QWxsb2NhdGVCdXR0ZXJmbHkoc3RvcmFnZVJlc3VsdEdQUiwgc2l6ZUdQUiwgc2Ny
YXRjaEdQUiwgc2NyYXRjaDJHUFIsIHJlc3VsdEdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAg
IGVtaXRJbml0aWFsaXplQnV0dGVyZmx5KHN0b3JhZ2VSZXN1bHRHUFIsIHNpemVHUFIsIGVtcHR5
VmFsdWVSZWdzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
PEpTQXJyYXk+KHJlc3VsdEdQUiwgdGVtcFZhbHVlLCBzdG9yYWdlUmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKLSAgICAgICAgICAgIG1faml0Lm11dGF0b3JG
ZW5jZSgpOworICAgICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIAog
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJy
YXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTdHJ1Y3R1cmVWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVy
YXRvcj4oCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsIHRlbXBWYWx1ZSwgc2l6ZUdQUiwgc3RvcmFnZVJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUikpOwpAQCAtNzc0NSw3ICs3NzQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU51a2VTdHJ1Y3R1cgogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgbV9qaXQu
bnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIGJhc2VHUFIpOworICAg
IG1faml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSgqbV9qaXQudm0oKSwgc3RvcmFn
ZUdQUiwgYmFzZUdQUik7CiAgICAgCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC04MTg0LDcg
KzgxODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRl
cm5hbFZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpKTsKICNlbmRpZgogICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIG1f
aml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3
U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIsIG9wZXJhbmRHUFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7
CkBAIC04MjYzLDcgKzgyNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlw
ZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0VHlwZWRBcnJheSksCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTW9kZSgpKSk7CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQu
bXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoCiAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3VHlw
ZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBlKSwKQEAgLTkzMzIsOSArOTMzMiw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgb2s7CiAgICAgCiAgICAgaWYgKGlzRmVuY2VkKSB7Ci0gICAgICAgIG9rLmFwcGVuZCht
X2ppdC5iYXJyaWVyQnJhbmNoKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7CisgICAgICAgIG9rLmFw
cGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoKCptX2ppdC52bSgpLCBiYXNlR1BSLCBzY3JhdGNoMUdQ
UikpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0
Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub0ZlbmNlID0gbV9qaXQuanVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCptX2ppdC52bSgp
KTsKICAgICAgICAgbV9qaXQubWVtb3J5RmVuY2UoKTsKICAgICAgICAgb2suYXBwZW5kKG1faml0
LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFzZUdQUikpOwogICAgICAgICBub0ZlbmNlLmxp
bmsoJm1faml0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjg4MSw3ICsyODgxLDcg
QEAgcHVibGljOgogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1f
aml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KAotICAgICAgICAgICAgcmVzdWx0R1BSLCBhbGxvY2F0
b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9j
YXRvckdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJl
VHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgYW5kIFN0b3JhZ2VU
eXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgpAQCAtMjg4OSw3ICsyODg5LDcgQEAgcHVibGljOgog
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQog
ICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENs
YXNzVHlwZT4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgc2xvd1BhdGgsIHNpemUpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09i
amVjdFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1
Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgsIHNpemUp
OwogICAgIH0KIAogICAgIC8vIENvbnZlbmllbmNlIGFsbG9jYXRvciBmb3IgYSBidWlsdC1pbiBv
YmplY3QuCkBAIC0yODk3LDEzICsyODk3LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBz
Y3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0g
ICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4ocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwor
ICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KCptX2ppdC52bSgp
LCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzbG93UGF0aCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwg
dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3RydWN0dXJlVHlwZSBhbmQgU3RvcmFnZVR5cGUg
Y2FuIGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVk
SlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBtX2pp
dC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIs
IHN0cnVjdHVyZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xv
d1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8
Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25T
aXplLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBBc3NlbWJseUhl
bHBlcnMgaml0KHZtLCBudWxscHRyKTsKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIp
OwogCiAgICAgLy8gV2UgZ2V0IHBhc3NlZCB0aGUgYWRkcmVzcyBvZiBhIHNjcmF0Y2ggYnVmZmVy
LiBUaGUgZmlyc3QgOC1ieXRlIHNsb3Qgb2YgdGhlIGJ1ZmZlcgogICAgIC8vIGlzIHRoZSBmcmFt
ZSBzaXplLiBUaGUgc2Vjb25kIDgtYnl0ZSBzbG90IGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIHdl
IGFyZSBzdXBwb3NlZCB0bwpAQCAtMTM1LDcgKzEzNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFbnRyeVRodW5rR2VuZXIKICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1VucmVhc29u
YWJsZU9TUkVudHJ5SnVtcERlc3RpbmF0aW9uKTsKIAogICAgIG9rLmxpbmsoJmppdCk7Ci0gICAg
aml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigp
OworICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDE2ICsx
MjYsMTYgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIC8v
IFdlIHdpbGwgYWRkIGV4Y2VwdGlvbiBoYW5kbGVycyB3aGlsZSBnZW5lcmF0aW5nLgogICAgIGNv
ZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOwogCi0gICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0sIGNvZGVCbG9jayk7CisgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAg
IEIzOjpnZW5lcmF0ZSgqc3RhdGUucHJvYywgaml0KTsKIAogICAgIC8vIEVtaXQgdGhlIGV4Y2Vw
dGlvbiBoYW5kbGVyLgogICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7
Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwog
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3Vw
RXhjZXB0aW9uSGFuZGxlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCi0jaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5j
cHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6
eVNsb3dQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIExhenlT
bG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBWTSYgdm0gPSAqY29kZUJsb2Nr
LT52bSgpOwogCi0gICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIEdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOwog
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uSnVtcHM7CiAgICAgcGFyYW1zLmV4
Y2VwdGlvbkp1bXBzID0gbV9leGNlcHRpb25UYXJnZXQgPyAmZXhjZXB0aW9uSnVtcHMgOiBudWxs
cHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAy
MTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAv
LyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50
IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBk
b2luZyBPU1IgZW50cnkgb3Igbm90LgotICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxv
Y2spOworICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlcjsKIApAQCAtMTQyLDExICsxNDIsMTEgQEAg
dm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKCk7CiAKICAgICAgICAgICAgIGF1dG8gbm9FeGNlcHRp
b24gPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpHcmVhdGVyVGhhbk9yRXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7Ci0gICAg
ICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigpOwotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbCgp
OwotICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICAgICAgICAgIG5vRXhjZXB0aW9u
LmxpbmsoJmppdCk7CiAKICAgICAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0ZWQuCiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
Y29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAor
ICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKKwogICAgICAgICAvLyBTdGFjayBPdmVyZmxv
dyBDaGVjay4KICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWly
ZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhZGRyZXNzT2ZTdGFja0xpbWl0KHZtKCkuYWRk
cmVzc09mU29mdFN0YWNrTGltaXQoKSk7CkBAIC0yMjYsNyArMjI4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpAQCAtMjM1LDcgKzIzNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25I
YW5kbGVyQ2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAog
ICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkBA
IC02NDQ4LDcgKzY0NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdp
dGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlI
ZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lk
dGgpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9u
Q2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CkBA
IC02NzU1LDcgKzY3NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdp
dGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlI
ZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lk
dGgpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhj
ZXB0aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9u
Q2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAg
fTsKIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJh
bXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNjk0Miw3ICs2OTQ0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJl
Z1QxKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUt
PnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVs
cGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6
Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsMTIgKzE4MSwxMiBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAvLyBUaGlzIGNvZGUgcmVxdWlyZXMgZnJhbWVQb2lu
dGVyUmVnaXN0ZXIgaXMgdGhlIHNhbWUgYXMgY2FsbEZyYW1lUmVnaXN0ZXIKICAgICBzdGF0aWNf
YXNzZXJ0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciA9PSBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgIk1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciBh
bmQgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIgbXVzdCBiZSB0aGUgc2FtZSIpOwogCi0gICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGNv
ZGVCbG9jayk7CiAKICAgICAvLyBUaGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBkbyBpcyByZXN0
YWJsaXNoIG91ciBmcmFtZSBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCiAgICAgaWYgKGV4
aXQuaXNHZW5lcmljVW53aW5kSGFuZGxlcigpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZt
LT5jYWxsRnJhbWVGb3JDYXRjaCk7IC8vIFRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGlzIGV4aXQs
IGxpa2UgYXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGZpZWxkIHNob3VsZCBiZSBub24tbnVsbC4K
LSAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigpOworICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNz
T2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIpOwogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVC
bG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVN0dWIoCiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQpOwogICAgIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoaml0LCBleGl0KTsKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoKnZtLCBqaXQsIGV4aXQp
OwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7
CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMiArMjksMTEgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1
ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVk
ZSAiSklUT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
LWNsYXNzIFN0YXRlOwotCiBjbGFzcyBTbG93UGF0aENhbGwgewogcHVibGljOgogICAgIFNsb3dQ
YXRoQ2FsbCgpIHsgfQpAQCAtNzksNyArNzgsNyBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsCisgICAgU3RhdGUmIHN0YXRlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxs
SGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKICAgICBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAg
ICAgU2xvd1BhdGhDYWxsIGNhbGw7CkBAIC04OSwxMyArODgsMTMgQEAgU2xvd1BhdGhDYWxsIGNh
bGxPcGVyYXRpb24oCiAgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZh
bHVlKCkpOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICBleGNlcHRp
b25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgICAgICBleGNl
cHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLnZtKCkpKTsK
ICAgICByZXR1cm4gY2FsbDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBl
cz4KIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4LAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENDYWxsSGVscGVycyYgaml0LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdEdQUiwKICAgICBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKIHsK
QEAgLTEwNCw3ICsxMDMsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKICAgICB9Ci0gICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odXNlZFJlZ2lzdGVycywgaml0
LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7Cisg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0
aW9uVGFyZ2V0LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQogCiBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRlJiwgQ29kZU9yaWdpbik7
CkBAIC0xMTUsNyArMTE0LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0
dXJuIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIHVzZWRSZWdpc3RlcnMsIGppdCwgY2FsbFNpdGVJ
bmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4pLCBleGNlcHRpb25UYXJnZXQsIGZ1
bmN0aW9uLAorICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4
Rm9yQ29kZU9yaWdpbihzdGF0ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rp
b24sCiAgICAgICAgIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBA
IGNsYXNzIFN0YXRlIHsKIHB1YmxpYzoKICAgICBTdGF0ZShERkc6OkdyYXBoJiBncmFwaCk7CiAg
ICAgflN0YXRlKCk7CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBncmFwaC5tX3ZtOyB9CiAgICAg
CiAgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRo
ZSByZXNwb25zaWJpbGl0eSBvZgogICAgIC8vIEZUTCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdl
IHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24uCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDcgQEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KAogICAgIFZNKiB2bSwgRnVuY3Rpb25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFy
KiBuYW1lLCB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKIHsKLSAg
ICBBc3NlbWJseUhlbHBlcnMgaml0KHZtLCAwKTsKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51
bGxwdHIpOwogCiAgICAgaWYgKGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgPT0g
RnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKSB7CiAgICAgICAgIC8v
IFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSB1c2UgdGhlIHNjcmF0Y2ggYnVmZmVyIGJl
Y2F1c2UgdGhpcyBmdW5jdGlvbiBhbHNvIHVzZXMgdGhlIHNjcmF0Y2ggYnVmZmVyLgpAQCAtMTY2
LDcgKzE2Niw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFzc2VtYmwKIAog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwg
Y29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiB7Ci0gICAgQXNzZW1ibHlIZWxwZXJzIGppdCgm
dm0sIDApOworICAgIEFzc2VtYmx5SGVscGVycyBqaXQoMCk7CiAgICAgCiAgICAgLy8gV2Ugd2Fu
dCB0byBzYXZlIHRoZSBnaXZlbiByZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3
ZSB3YW50IHRvIHNhdmUgdGhlCiAgICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBw
YXN0IHRoYXQgb2Zmc2V0LCBhbmQgdGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
CShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw4IEBAIFJlZ2lzdGVy
KiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgKIAogSlNHbG9iYWxPYmplY3QqIENhbGxG
cmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCgpCiB7Ci0gICAgaWYgKGNhbGxlZSgpLT5pc09iamVj
dCgpKSB7IAorICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSgpLmlzQ2VsbCgpKTsKKyAgICBpZiAo
Y2FsbGVlKCkuYXNDZWxsKCktPmlzT2JqZWN0KCkpIHsgCiAgICAgICAgIGlmICh0aGlzID09IGxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKQogICAgICAgICAgICAgcmV0dXJuIGxl
eGljYWxHbG9iYWxPYmplY3QoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgor
I2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgpAQCAt
ODgsNyArODksNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgSlNWYWx1ZSBjYWxsZWVB
c1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFs
dWUoKTsgfQogICAgICAgICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlz
W0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxs
ZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5ib3hlZENl
bGwoKTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxl
ZUJpdHModGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KICAgICAgICAg
U1VQUFJFU1NfQVNBTiBKU1ZhbHVlIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlSlNWYWx1ZSgpOyB9CiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAgICAgICBDb2RlQmxvY2sqKiBh
ZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2Nr
Kio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVCaXRzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBXZWJBc3Nl
bWJseUNhbGxlZTsKK30KKworY2xhc3MgSlNDZWxsOworCitjbGFzcyBDYWxsZWVCaXRzIHsKK3B1
YmxpYzoKKyAgICBDYWxsZWVCaXRzKCkgPSBkZWZhdWx0OworICAgIENhbGxlZUJpdHModm9pZCog
cHRyKSA6IG1fcHRyKHB0cikgeyB9IAorCisgICAgQ2FsbGVlQml0cyYgb3BlcmF0b3I9KEpTQ2Vs
bCogY2VsbCkKKyAgICB7CisgICAgICAgIG1fcHRyID0gY2VsbDsKKyAgICAgICAgQVNTRVJUKCFp
c1dhc20oKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIGlzV2Fz
bSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIDE7IH0K
KyAgICBib29sIGlzQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG1fcHRyKSAmIDE7IH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBhc0NlbGwoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1dhc20oKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxKU0NlbGwqPihtX3B0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBXYXNt
OjpXZWJBc3NlbWJseUNhbGxlZSogYXNXYXNtQ2FsbGVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1dhc20oKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V2FzbTo6V2Vi
QXNzZW1ibHlDYWxsZWUqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3B0cikgJiB+MSk7Cisg
ICAgfQorCisgICAgdm9pZCogcmF3UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgdm9pZCogbV9wdHIgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0
ICs0NzIsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVtYWluaW5n
Q2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsKLSAgICAgICAgICAgIGlmICghdmlzaXRvci0+aXNX
YXNtRnJhbWUoKQotICAgICAgICAgICAgICAgICYmICEhdmlzaXRvci0+Y29kZUJsb2NrKCkKLSAg
ICAgICAgICAgICAgICAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2Nr
KCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dh
c21GcmFtZSgpKQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZTo6
d2FzbSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYg
IXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5j
dGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+Y29k
ZUJsb2NrKCksIHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAg
ICAgU3RhY2tGcmFtZShtX3ZtLCAgdmlzaXRvci0+Y2FsbGVlKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RhY2tGcmFtZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSkpOwogICAgICAgICAgICAg
fQogICAgIAogICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0t
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJ
KHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CiAgICAgICAgIGludDMyX3QmIHRhZygpOwog
CisgICAgICAgIHZvaWQqIHBvaW50ZXIoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVnaXN0
ZXIgd2l0aEludChpbnQzMl90IGkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVyIHIg
PSBqc051bWJlcihpKTsKQEAgLTE5NSw2ICsxOTcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5k
aWYKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjpwb2ludGVyKCkg
Y29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHUuZW5jb2Rl
ZFZhbHVlLnB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBh
eWxvYWQoKSk7CisjZW5kaWYKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgUmVn
aXN0ZXI6OnBheWxvYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHUuZW5jb2RlZFZh
bHVlLmFzQml0cy5wYXlsb2FkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGlu
ZWRGcmFtZShDCiAgICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5t
X0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lOwogICAgIG1fZnJh
bWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCi0gICAgSlNDZWxsKiBjYWxsZWUgPSBjYWxsRnJh
bWUtPmNhbGxlZSgpOworICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUo
KTsKICAgICBtX2ZyYW1lLm1fY2FsbGVlID0gY2FsbGVlOwogCi0gICAgaWYgKGNhbGxlZS0+aXNB
bnlXYXNtQ2FsbGVlKCpjYWxsZWUtPnZtKCkpKSB7CisgICAgaWYgKGNhbGxlZS5pc1dhc21GcmFt
ZSgpKSB7CiAgICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAgIG1f
ZnJhbWUubV9jb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVP
ZmZzZXQgPSAwOwpAQCAtMjU0LDE0ICsyNTQsOCBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3Rh
Y2tWaXNpdG9yOjpGcmFtCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGlzV2Fz
bUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkp
IHsKLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oKmNhbGxlZS0+dm0oKSwgY2FsbGVlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OwotICAgICAgICAgICAgLy8gT3RoZXIgd2FzbSBjYWxsZWVzIChlLmcsIHN0dWJzKSBkb24ndCB1
c2UgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyBub3RoaW5nIG5lZWRzCi0gICAgICAgICAgICAv
LyB0byBiZSByZXN0b3JlZCBmb3IgdGhlbS4KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IHRoaXMtPmNh
bGxlZSgpLmFzV2FzbUNhbGxlZSgpOworICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
QEAgLTI3Niw3ICsyNzAsNiBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9yOjpG
cmFtCiBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsK
ICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVl
KCk7CiAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKICAgICBjYXNlIENvZGVUeXBlOjpXYXNt
OgpAQCAtMjg4LDEyICsyODEsMTQgQEAgU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0
aW9uTmFtZQogICAgIGNhc2UgQ29kZVR5cGU6Ok1vZHVsZToKICAgICAgICAgdHJhY2VMaW5lID0g
QVNDSUlMaXRlcmFsKCJtb2R1bGUgY29kZSIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENv
ZGVUeXBlOjpOYXRpdmU6CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOiB7CisgICAgICAgIEpT
Q2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChjYWxs
ZWUpCiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2Fs
bEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KGNhbGxlZSkpLmltcGwoKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246Ci0gICAgICAgIHRyYWNlTGlu
ZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwganNDYXN0PEpT
T2JqZWN0Kj4oY2FsbGVlKSkuaW1wbCgpOworICAgIH0KKyAgICBjYXNlIENvZGVUeXBlOjpGdW5j
dGlvbjogCisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxs
RnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4odGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCkp
KS5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDoKICAg
ICAgICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJnbG9iYWwgY29kZSIpOwpAQCAtNDU1LDcg
KzQ1MCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmUKICAgICAg
ICAgICAgIG91dC5wcmludChpbmRlbnQsICJJbmxpbmVDYWxsRnJhbWU6ICIsIFJhd1BvaW50ZXIo
bV9pbmxpbmVDYWxsRnJhbWUpLCAiXG4iKTsKICNlbmRpZgogCi0gICAgICAgIG91dC5wcmludChp
bmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCkpLCAiXG4iKTsKKyAgICAgICAg
b3V0LnByaW50KGluZGVudCwgImNhbGxlZTogIiwgUmF3UG9pbnRlcihjYWxsZWUoKS5yYXdQdHIo
KSksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAicmV0dXJuUEM6ICIsIFJhd1Bv
aW50ZXIocmV0dXJuUEMpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNhbGxl
ckZyYW1lOiAiLCBSYXdQb2ludGVyKGNhbGxlckZyYW1lKSwgIlxuIik7CiAgICAgICAgIHVuc2ln
bmVkIGxvY2F0aW9uUmF3Qml0cyA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVBc1Jhd0JpdHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KICAgICAgICAgYm9vbCBjYWxsZXJJ
c1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNWTUVudHJ5RnJhbWU7IH0K
ICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVy
RnJhbWU7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxl
ZTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVl
OyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVjb2RlT2Zmc2V0OyB9CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKCkgY29uc3QgewpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAgICAgVk1F
bnRyeUZyYW1lKiBtX1ZNRW50cnlGcmFtZTsKICAgICAgICAgVk1FbnRyeUZyYW1lKiBtX0NhbGxl
clZNRW50cnlGcmFtZTsKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwotICAgICAg
ICBKU0NlbGwqIG1fY2FsbGVlOworICAgICAgICBDYWxsZWVCaXRzIG1fY2FsbGVlOwogICAgICAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICAg
ICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMTQ0MjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMSwyNCArMzAxLDI0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRB
c3NlcnRBcmd1bWVudEMKIAogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAotdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6aml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJiB2bSkKIHsKICAgICBKdW1w
IG5vRXhjZXB0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbm9FeGNlcHRpb24gPSBicmFu
Y2hUZXN0NjQoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigp
KSk7CisgICAgbm9FeGNlcHRpb24gPSBicmFuY2hUZXN0NjQoWmVybywgQWJzb2x1dGVBZGRyZXNz
KHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IG5vRXhjZXB0aW9uID0gYnJhbmNoMzIoRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbm9FeGNlcHRpb24gPSBi
cmFuY2gzMihFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwg
VHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAgIGFib3J0V2l0aFJlYXNvbihKSVRVbmNvdWdo
dEV4Y2VwdGlvbkFmdGVyQ2FsbCk7CiAgICAgbm9FeGNlcHRpb24ubGluayh0aGlzKTsKIH0KIAot
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KCkKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eihWTSYgdm0pCiB7CiAgICAgaWYgKCFPcHRpb25zOjp1
c2VFeGNlcHRpb25GdXp6KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVuY29kZWRKU1ZhbHVl
KiBidWZmZXIgPSB2bSgpLT5leGNlcHRpb25GdXp6aW5nQnVmZmVyKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycykpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSB2bS5leGNlcHRpb25GdXp6
aW5nQnVmZmVyKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykpOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtMzU0LDIzICszNTQsMjMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNh
bGxFeGNlcHRpb25GdXp6KAogICAgIH0KIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAg
QXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKFZNJiB2bSkKIHsKLSAgICByZXR1
cm4gZW1pdEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICByZXR1cm4g
ZW1pdEV4Y2VwdGlvbkNoZWNrKHZtLCBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiB9CiAKLUFzc2Vt
Ymx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNl
cHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQorQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKFZNJiB2bSwg
RXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKLSAg
ICBjYWxsRXhjZXB0aW9uRnV6eigpOworICAgIGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKIAogICAg
IGlmICh3aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3Jt
YWxFeGNlcHRpb25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRp
b25DaGVjayk7CiAgICAgCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5v
blplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkp
KTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVj
ayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mRXhjZXB0aW9u
KCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2lu
ZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRk
cmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAg
cmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFs
IDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0
ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdp
ZHRoKQpAQCAtMzgyLDE1ICszODIsMTUgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5
SGVscGVyczo6ZQogICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKLUFzc2VtYmx5SGVs
cGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVj
aygpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uUGF0Y2hh
YmxlRXhjZXB0aW9uQ2hlY2soVk0mIHZtKQogewotICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7Cisg
ICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgQWJzb2x1dGVBZGRy
ZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoVGVz
dDY0KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwog
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMy
KDApKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZt
LmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAgIAog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC00NDksMTIgKzQ0OSwxMiBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKLXZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0
ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBU1NFUlQo
ZGVzdCAhPSBzY3JhdGNoKTsKICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291
cmNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKLSAgICBsb2FkUHRyKHZt
KCktPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmJhc2UoKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0
cih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gpOwogICAgIGxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBkZXN0LCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCksIGRlc3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7
CkBAIC01NDksMTAgKzU0OSwxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRo
dW5rKEpTCiAgICAgZW1pdFJhbmRvbVRodW5rSW1wbCgqdGhpcywgc2NyYXRjaDAsIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgcmVzdWx0LCBsb2FkRnJvbUhpZ2gsIHN0b3JlVG9IaWdoLCBsb2FkRnJvbUxv
dywgc3RvcmVUb0xvdyk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1
bmsoR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BS
UmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRS
YW5kb21UaHVuayhWTSYgdm0sIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCkKIHsKICAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjcmF0Y2gz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoMywgc2NyYXRjaDMsIHNjcmF0Y2gwKTsK
KyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaDMsIHNjcmF0Y2gzLCBzY3JhdGNoMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gzLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgc2NyYXRjaDMpOwogICAgIC8vIE5vdywgc2NyYXRjaDMgaG9sZHMgSlNHbG9iYWxP
YmplY3QqLgogCkBAIC01NzMsMTAgKzU3MywxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFJhbmRvbVRodW5rKEdQCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpCit2b2lkIEFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKFZNJiB2bSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBtX3ZtLT5n
ZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGFsbENhbGxlZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygp
OwogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCk7CiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNh
dmVzLT5zaXplKCk7CiAKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cmVzdG9yZUNhbGxlZVNhdmVzCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRH
UFJSZWcpOwogCi0gICAgbG9hZFB0cigmbV92bS0+dG9wVk1FbnRyeUZyYW1lLCBzY3JhdGNoKTsK
KyAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQg
Zm9yIHRoZSBzY3JhdGNoLgpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
Ojp3YW5nc0ludDY0SGFzaChHUFIKIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFzRlBSLCBG
UFJSZWcgdGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBKU1ZhbHVlUmVn
cyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFzRlBS
LCBGUFJSZWcgdGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQogewogICAg
IC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgc3RydWN0dXJlOgogICAg
IC8vIGlmICh2YWx1ZSBpcyBib29sZWFuKSB7CkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUbwogICAgICAgICBBU1NFUlQoc2NyYXRjaCAh
PSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgSnVtcExpc3QgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwot
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZS5wYXlsb2FkR1BSKCksIHJlc3VsdCwgc2Ny
YXRjaCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZS5wYXlsb2FkR1BSKCks
IHJlc3VsdCwgc2NyYXRjaCk7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmpl
Y3QpLCBzY3JhdGNoKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVu
ZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgc2NyYXRjaCkpOwogICAgICAgICAvLyBXZSBhY3QgbGlrZSB3ZSBhcmUg
InVuZGVmaW5lZCIgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOCBAQCB0
eXBlZGVmIHZvaWQgKCpWX0RlYnVnT3BlcmF0aW9uX0VQUCkoRXhlCiAKIGNsYXNzIEFzc2VtYmx5
SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiBwdWJsaWM6Ci0gICAgQXNzZW1ibHlI
ZWxwZXJzKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV92bSh2bSkK
LSAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgQXNzZW1ibHlIZWxwZXJzKENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAg
ICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YmFzZWxp
bmVBbHRlcm5hdGl2ZSgpIDogMCkKICAgICB7CiAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgewpA
QCAtNjIsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07
IH0KICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVy
OyB9CiAKICAgICB2b2lkIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCkKQEAgLTMzNSwxNSAr
MzMzLDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1wUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1
c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CiAKLSAgICAgICAgbG9hZFB0cigmbV92bS0+dG9w
Vk1FbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFt
ZSwgdGVtcDEpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOwogCi0gICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IG1fdm0tPmdldEFsbENhbGxlZVNhdmVS
ZWdpc3Rlck9mZnNldHMoKTsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxl
ZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgICAgICBS
ZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpOwogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNp
emUoKTsKICAgICAgICAgCkBAIC0zNjEsOSArMzU5LDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihWTSYpOwogCi0gICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1wUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwpA
QCAtMzc0LDEwICszNzIsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkp
OwogCiAgICAgICAgIC8vIENvcHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZl
ZCBjYWxsZWVTYXZlcyBpbiByZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAg
ICBsb2FkUHRyKCZtX3ZtLT50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgbG9hZFB0
cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1w
MSk7CiAKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gbV92
bS0+Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJP
ZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2
ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgICAgICBSZWdpc3Rl
clNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwog
ICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsK
QEAgLTk3Myw2MiArOTcxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVn
VDU7CiAgICAgfQogCi0gICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBl
ZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgotICAgIHZvaWQgZGVidWdDYWxsKFZf
RGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKLSAgICB7Ci0gICAg
ICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAg
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX3ZtLT5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7Ci0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RvcmU2NChHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKLSNlbHNlCi0gICAgICAgICAgICBzdG9y
ZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOwotI2VuZGlmCi0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciAr
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0KLSNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJN
NjQpIHx8IENQVShNSVBTKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZ3VtZW50
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotI2VsaWYgQ1BVKFg4NikKLSAgICAg
ICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgMCk7Ci0gICAgICAgIHBva2UoVHJ1
c3RlZEltbVB0cihhcmd1bWVudCksIDEpOwotICAgICAgICBwb2tlKFRydXN0ZWRJbW1QdHIoYnVm
ZmVyKSwgMik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0jZWxz
ZQotI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKLSNlbmRpZgot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rp
b24pKSwgc2NyYXRjaCk7Ci0gICAgICAgIGNhbGwoc2NyYXRjaCk7Ci0KLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpyZWdU
MCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIg
KyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBsb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICBsb2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgbG9hZDMyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotI2Vu
ZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0
ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZyk7CkBAIC0xMDUy
LDcgKzk5NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5l
KCkgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgdm9pZCBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oVk0mKTsKIAogICAgIHZvaWQg
aW5jcmVtZW50U3VwZXJTYW1wbGVyQ291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudFN1cGVyU2Ft
cGxlckNvdW50KCk7CkBAIC0xMTg5LDE0ICsxMTMxLDE0IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KICAgICAKLSAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CisgICAgdm9pZCBjYWxsRXhj
ZXB0aW9uRnV6eihWTSYpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9y
bWFsRXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKICAgICBlbnVtIEV4
Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCi0gICAgICAgIEV4Y2Vw
dGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGgg
PSBOb3JtYWxKdW1wV2lkdGgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdE5vblBh
dGNoYWJsZUV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgSnVtcCBlbWl0SnVtcElmRXhjZXB0aW9uKCk7
CisgICAgICAgIFZNJiwgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ss
IEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSnVtcCBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mKTsKKyAgICBKdW1w
IGVtaXRKdW1wSWZFeGNlcHRpb24oVk0mKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVS
UykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJh
Y3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKQEAgLTEy
NzksNyArMTIyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Q291bnQoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVtaXRMb2Fk
U3RydWN0dXJlKFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCk7CisgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lzdGVySUQgc291
cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICAgICB2b2lkIGVt
aXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVn
aXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEKQogICAgIHsKQEAgLTEzMTQsNDUgKzEyNTYsNDUgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKGFk
ZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAgICAgCi0gICAg
SnVtcCBiYXJyaWVyQnJhbmNoKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICBK
dW1wIGJhcnJpZXJCcmFuY2goVk0mIHZtLCBHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIp
CiAgICAgewogICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3Jh
dGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNo
b2xkKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNv
bHV0ZUFkZHJlc3Modm0uaGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKICAgICB9
CiAKLSAgICBKdW1wIGJhcnJpZXJCcmFuY2goSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQ
UikKKyAgICBKdW1wIGJhcnJpZXJCcmFuY2goVk0mIHZtLCBKU0NlbGwqIGNlbGwsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKICAgICAg
ICAgbG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihB
Ym92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFy
cmllclRocmVzaG9sZCgpKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgc2NyYXRj
aEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtLmhlYXAuYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgp
KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmFycmllclN0b3JlTG9hZEZlbmNlKCkKKyAgICB2
b2lkIGJhcnJpZXJTdG9yZUxvYWRGZW5jZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIEp1
bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0pOwogICAgICAgICBtZW1vcnlG
ZW5jZSgpOwogICAgICAgICBvay5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG11
dGF0b3JGZW5jZSgpCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEp1bXAgb2sgPSBq
dW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11
dGF0b3JGZW5jZU5vdE5lZWRlZCh2bSk7CiAgICAgICAgIHN0b3JlRmVuY2UoKTsKICAgICAgICAg
b2subGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdG9yZUJ1dHRlcmZseShHUFJS
ZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQorICAgIHZvaWQgc3RvcmVCdXR0ZXJmbHkoVk0m
IHZtLCBHUFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgaWYg
KGlzWDg2KCkpIHsKICAgICAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhvYmpl
Y3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNl
Tm90TmVlZGVkKCk7CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVk
ZWQodm0pOwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZs
eSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAg
ICBzdG9yZUZlbmNlKCk7CkBAIC0xMzYyLDcgKzEzMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBudWtlU3RydWN0dXJlQW5kU3Rv
cmVCdXR0ZXJmbHkoR1BSUmVnIGJ1dHRlcmZseSwgR1BSUmVnIG9iamVjdCkKKyAgICB2b2lkIG51
a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShWTSYgdm0sIEdQUlJlZyBidXR0ZXJmbHksIEdQ
UlJlZyBvYmplY3QpCiAgICAgewogICAgICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICAgICAg
b3IzMihUcnVzdGVkSW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG51a2VkU3RydWN0dXJlSURC
aXQoKSkpLCBBZGRyZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkBA
IC0xMzcwLDcgKzEzMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVk
ZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCh2bSk7
CiAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90PihudWtlZFN0
cnVjdHVyZUlEQml0KCkpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSkpOwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZs
eSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTM4
MSw5ICsxMzIzLDkgQEAgcHVibGljOgogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQog
ICAgIAotICAgIEp1bXAganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCkKKyAgICBKdW1wIGp1
bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZChWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mTXV0
YXRvclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8s
IEFic29sdXRlQWRkcmVzcyh2bS5oZWFwLmFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNlZCgp
KSk7CiAgICAgfQogICAgIAogICAgIC8vIEVtaXRzIHRoZSBicmFuY2ggc3RydWN0dXJlIGZvciB0
eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0IGZhbGwgdGhyb3VnaC4gVGhl
CkBAIC0xNDcxLDcgKzE0MTMsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IHZvaWQgZW1pdFJhbmRvbVRodW5rKEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnIHNjcmF0Y2gwLCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgRlBSUmVnIHJlc3VsdCk7Ci0gICAgdm9p
ZCBlbWl0UmFuZG9tVGh1bmsoR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KTsKKyAgICB2b2lkIGVt
aXRSYW5kb21UaHVuayhWTSYsIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYKIAog
ICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGluIGFsbG9j
YXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCkBAIC0xNTUxLDIyICsxNDkz
LDIyIEBAIHB1YmxpYzoKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5
cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlPgogICAgIHZvaWQgZW1p
dEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplKAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
LCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNj
cmF0Y2hHUFIxLAorICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6
ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8Q2xhc3NUeXBlPigqdm0oKSktPmFsbG9jYXRvckZvcihzaXplKTsKKyAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2Nh
dG9yRm9yKHNpemUpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIx
LCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHZtLCByZXN1bHRHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjEs
IHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBl
LCB0eXBlbmFtZSBTdG9yYWdlVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQ
UlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNs
b3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoVk0mIHZtLCBHUFJSZWcgcmVz
dWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BS
UmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkK
ICAgICB7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxDbGFzc1R5
cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNsb3dQYXRoLCBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApKTsKKyAgICAgICAgZW1p
dEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENsYXNzVHlwZT4odm0sIHJlc3VsdEdQUiwg
c3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoLCBD
bGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApKTsKICAgICB9CiAgICAgCiAgICAgLy8gYWxsb2Nh
dGlvblNpemUgY2FuIGJlIGFsaWFzZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMu
IElmIGl0J3Mgbm90IGFsaWFzZWQgdGhlbiBpdApAQCAtMTU4NywyMSArMTUyOSwyMSBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5h
bWUgU3RydWN0dXJlVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxs
KEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2Nh
dGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlz
dCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbChWTSYg
dm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxs
b2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1w
TGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vi
c3BhY2VGb3I8Q2xhc3NUeXBlPigqdm0oKSk7CisgICAgICAgIFN1YnNwYWNlJiBzdWJzcGFjZSA9
ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKTsKICAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFi
bGVTaXplZChyZXN1bHRHUFIsIHN1YnNwYWNlLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEs
IHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhU
eXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUjIpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KLSAg
ICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09iamVjdChHUFJSZWcgcmVzdWx0R1BS
LCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcg
c2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAg
IHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0KFZNJiB2bSwgR1BSUmVnIHJl
c3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPENsYXNzVHlw
ZT4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENl
bGw8Q2xhc3NUeXBlPih2bSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnLCBGUFJSZWcsIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCosIGJvb2wgbmVnYXRlUmVzdWx0
ID0gZmFsc2UpOworICAgIHZvaWQgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihWTSYsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcsIEZQUlJlZywgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIEpTR2xvYmFsT2JqZWN0KiwgYm9vbCBuZWdhdGVSZXN1bHQg
PSBmYWxzZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgogICAgIHZv
aWQgZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
SnVtcExpc3QmIHNsb3dQYXRoKQpAQCAtMTYzNiw3ICsxNTc4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgd2FuZ3NJbnQ2NEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7
CiAjZW5kaWYKIAotICAgIHZvaWQgbG9hZFdhc21Db250ZXh0KEdQUlJlZyBkc3QpCisgICAgdm9p
ZCBsb2FkV2FzbUNvbnRleHQoVk0mIHZtLCBHUFJSZWcgZHN0KQogICAgIHsKICNpZiBFTkFCTEUo
RkFTVF9UTFNfSklUKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0VExT
KCkpIHsKQEAgLTE2NDUsMTcgKzE1ODcsMTcgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYK
ICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8gYWxsb3cgUElD
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NzczCi0gICAgICAg
IGxvYWRQdHIoJm1fdm0tPndhc21Db250ZXh0LCBkc3QpOworICAgICAgICBsb2FkUHRyKCZ2bS53
YXNtQ29udGV4dCwgZHN0KTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlV2FzbUNvbnRleHQoR1BS
UmVnIHNyYykKKyAgICB2b2lkIHN0b3JlV2FzbUNvbnRleHQoVk0mIHZtLCBHUFJSZWcgc3JjKQog
ICAgIHsKICNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQogICAgICAgICBpZiAoT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlGYXN0VExTKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RvcmVUb1RMU1B0cihz
cmMsIGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX1dBU01fQ09OVEVYVF9LRVkpKTsKICNlbmRpZgog
ICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGlzIHN0YXRlIGVsc2V3aGVyZSB0byBhbGxvdyBQSUMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3NzMKLSAgICAgICAg
c3RvcmVQdHIoc3JjLCAmbV92bS0+d2FzbUNvbnRleHQpOworICAgICAgICBzdG9yZVB0cihzcmMs
ICZ2bS53YXNtQ29udGV4dCk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgbG9hZFdhc21Db250
ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpCkBAIC0xNjc3LDcgKzE2MTksNiBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgVk0qIG1fdm07CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDIx
NDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuVGFpbFAKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6ZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNj
cmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgQVNTRVJUKCFSZWdpc3Rl
clNldDo6YXJndW1lbnRHUFJTKCkuZ2V0KHNjcmF0Y2gxTm9uQXJnR1BSKSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKHZtKCktPnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSks
IHNjcmF0Y2gxTm9uQXJnR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hp
Y2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7Ci0gICAgSnVt
cCBvayA9IGJyYW5jaFB0cihCZWxvdywgc2hhZG93UGFja2V0LCBUcnVzdGVkSW1tUHRyKHZtKCkt
PnNoYWRvd0NoaWNrZW4oKS5sb2dFbmQoKSkpOworICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoQmVs
b3csIHNoYWRvd1BhY2tldCwgVHJ1c3RlZEltbVB0cih2bS5zaGFkb3dDaGlja2VuKCkubG9nRW5k
KCkpKTsKICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9n
KSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKICAgICBjYWxsKHNjcmF0Y2gxTm9uQXJnR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKS0+c2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1
cnNvcigpKSwgc2NyYXRjaDFOb25BcmdHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bS5z
aGFkb3dDaGlja2VuKCkuYWRkcmVzc09mTG9nQ3Vyc29yKCkpLCBzY3JhdGNoMU5vbkFyZ0dQUik7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsK
ICAgICBvay5saW5rKHRoaXMpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFNoYWRv
d0NoaWNrZW46OlBhY2tldCkpLCBzaGFkb3dQYWNrZXQsIHNjcmF0Y2gyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsOCArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ0NhbGxIZWxwZXJzIDog
cHVibGljIEFzc2VtYmx5SGVscGVycyB7CiBwdWJsaWM6Ci0gICAgQ0NhbGxIZWxwZXJzKFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwKQotICAgICAgICA6IEFzc2VtYmx5SGVscGVycyh2
bSwgY29kZUJsb2NrKQorICAgIENDYWxsSGVscGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDAp
CisgICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKGNvZGVCbG9jaykKICAgICB7CiAgICAgfQogICAg
IApAQCAtMjQ0MCwxMSArMjQ0MCwxMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCkKKyAgICB2b2lkIGp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIoVk0mIHZtKQogICAgIHsKICAgICAgICAgLy8gZ2VuZXJpY1Vud2luZCgpIGxlYXZl
cyB0aGUgaGFuZGxlciBDYWxsRnJhbWUqIGluIHZtLT5jYWxsRnJhbWVGb3JDYXRjaCwKICAgICAg
ICAgLy8gYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHZtLT50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdy4KLSAgICAgICAgbG9hZFB0cigmdm0oKS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3csIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cigmdm0udGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3csIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAganVtcChHUFJJbmZvOjpyZWdUMSk7
CiAgICAgfQogCkBAIC0yNjQwLDcgKzI2NDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NvcGUpOwogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgotICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJS
ZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3
ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlT2Zmc2V0KTsKIAotICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgY29weUNhbGxlZVNh
dmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZt
KCkpOwogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9m
ZnNldCk7CiAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVy
blZhbHVlR1BSKSk7CkBAIC04NzIsNyArODcyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcgogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJh
bWVSb2xsYmFjay5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhl
IFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogCkBAIC04ODUsMTQgKzg4NSwxNCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAgICAgICAgIHBva2Uo
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwoKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
LCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKS52YWx1
ZSgpKSk7Ci0gICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpIHx8IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKSB7CiAgICAgICAg
IG1fZXhjZXB0aW9uSGFuZGxlciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tz
LmxpbmsodGhpcyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5k
bGVyIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2Fs
bEZyYW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVF
eGNlcHRpb25IYW5kbGVyCiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsK
ICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRp
b25IYW5kbGVyKS52YWx1ZSgpKSk7Ci0gICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
KyAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCwxMiArMjk0LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNo
ZWNrKCkpOworICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNlcHRp
b25DaGVjaygqdm0oKSkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVj
a1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2so
KSk7CisgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5h
cHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGdlbmVyYXRlT3V0T2ZMaW5lKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAg
IGF1dG8gbGlua0p1bXBUb091dE9mTGluZVNuaXBwZXQgPSBbJl0gKCkgewotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnMgaml0KGNvZGVCbG9jayk7CiAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwog
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2Jv
ZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICAg
ICAgYm9vbCBuZWVkc0JyYW5jaENvbXBhY3Rpb24gPSBmYWxzZTsKQEAgLTE1MCw3ICsxNTAsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgaWYgKG1fZ2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCkgewog
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICAgICAgICAgIE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZSBnZW5lcmF0aW9uU3RhdGU7CiAgICAgICAgICAgICBib29sIGdlbmVyYXRlZElu
bGluZSA9IGdlbmVyYXRlSW5saW5lKGppdCwgZ2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJv
ZmlsaW5nKTsKIApAQCAtMTkwLDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmVwbGFjZUNh
bGwoKTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVuZEp1bXBMaXN0OyAKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aEp1bXBMaXN0OyAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDgpLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
KyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKIAogICAgIC8vIEFsbCB0cmFtcG9s
aW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0
aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fdm0sICp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwpAQCAtMTc0LDcgKzE3NCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KICAgICBpZiAoYWxsb2Nh
dG9yKQogICAgICAgICBhZGRTbG93Q2FzZShKdW1wKCkpOwogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QoKnZtKCksIHJlc3Vs
dFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwpAQCAtNDYzLDcgKzQ2Myw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3UKICAgICBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOwogICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMzsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbih2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgdmFsdWUsIHJlc3VsdCwg
c2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0MzIoWmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKIH0KQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VyCiAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWUocmVnVDEsIHJlZ1QwKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogICAgIEdQUlJl
ZyByZXN1bHQgPSByZWdUMzsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZhbHVlLCBy
ZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICBlbWl0Q29udmVy
dFZhbHVlVG9Cb29sZWFuKCp2bSgpLCB2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1
bHQpLCB0YXJnZXQpOwogfQpAQCAtNzYwLDEwICs3NjAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVxX251bGwoSW5zdHJ1Y3Rpb24qIAogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFs
dWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSgpKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blRocm93LCByZWdUMSwgcmVnVDApOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAg
ICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHVzaF93aXRoX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MjEs
NyArODIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX3N0cmluZyhJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigqdm0oKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAg
ICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBoYW5kbGVy
LgpAQCAtODMyLDcgKzgzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9u
KiBjdXIKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNoZWNr
SWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmlsZXIpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCp2bSgpKTsKICAgICBpc0NhdGNoYWJsZUV4Y2VwdGlvbi5saW5rKHRoaXMpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CkBAIC05NzcsNyArOTc3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIGhhc1NlZW5NdWx0aXBsZUNh
bGxlZXMubGluayh0aGlzKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJl
UmVnLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KCp2bSgpLCByZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywg
c3RydWN0dXJlUmVnLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwogfQpAQCAtMTMxNCw3ICsxMzE0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3BybwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOwogCiAgICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKICAgICBlbWl0TG9hZFBheWxvYWQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDMpOwpAQCAtMTMyOCw3ICsxMzI4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFRhZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCByZWdUMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogICAgIGlmIChhbGxvY2F0b3IpCiAgICAg
ICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdCgqdm0oKSwgcmVzdWx0UmVnLCBhbGxv
Y2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1t
UHRyKDApLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24KIAogICAgIC8vIExvYWQgdGhlIHByb3RvdHlw
ZSBvZiB0aGUgb2JqZWN0IGluIHJlZ1QyLiAgSWYgdGhpcyBpcyBlcXVhbCB0byByZWdUMSAtIFdJ
TiEKICAgICAvLyBPdGhlcndpc2UsIGNoZWNrIGlmIHdlJ3ZlIGhpdCBudWxsIC0gaWYgd2UgaGF2
ZSB0aGVuIGRyb3Agb3V0IG9mIHRoZSBsb29wLCBpZiBub3QgZ28gYWdhaW4uCi0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUocmVnVDIsIHJlZ1QyLCByZWdUMyk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
KnZtKCksIHJlZ1QyLCByZWdUMiwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgaXNJbnN0YW5j
ZSA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcElmSlNDZWxs
KHJlZ1QyKS5saW5rVG8obG9vcCwgdGhpcyk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkKEluc3RydWN0aQogICAgIEp1bXAgbm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAg
IGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKQEAg
LTM1MSw3ICszNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1
CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCB2YWx1ZSk7Ci0gICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyh2YWx1
ZSksIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBz
Y3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihaZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKiAKIAogICAgIC8vIEZpcnN0LCBoYW5k
bGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhl
IHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZShyZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0g
anVtcCgpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChJ
bnN0cnVjdGlvbioKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZShyZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9h
ZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKQEAgLTQzMyw3ICs0MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0
cnVjdGlvbiogY3VyCiAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKICAgICBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7Ci0gICAgZW1p
dENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyh2YWx1ZSksIHJlc3VsdCwgc2NyYXRj
aCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xl
YW4oKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVzdWx0
KSwgdGFyZ2V0KTsKIH0KIApAQCAtNDUxLDEwICs0NTEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVxKEluc3RydWN0aW9uKiBjdXJyZQogdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFs
dWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSgpKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgcmVnVDApOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAg
ICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHVzaF93aXRoX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MzAs
NyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigpOworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigqdm0oKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKICAg
ICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBj
YWxsRnJhbWVSZWdpc3Rlcik7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxl
cik7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgIGp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmso
dGhpcyk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKQEAgLTY0MCw3
ICs2NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjCiAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUocmVn
VDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMiwgcmVnVDApOwpAQCAtNjcyLDcgKzY3Miw3IEBAIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKEluc3RydWN0aW9uKiAKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZShyZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0
TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC03
NTIsNyArNzUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpbwog
ICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKIAogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFs
bG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KCp2bSgpLCByZXN1bHRSZWcsIG51
bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBUcnVzdGVkSW1tUHRyKDApLCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBz
Y3JhdGNoUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaFJlZywgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc2Ny
YXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSks
IHNjcmF0Y2hSZWcpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoSW5zdHJ1Y3QKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKCkpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQpAQCAtMTM3OSw3ICsxMzc5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIEdQUlJlZyBzaGFkb3dQ
YWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAv
LyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0
Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIxNDQyMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjE3LDcgKzEyMTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cih1bnNpZ25lZCBvd25lCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdNYXNrUmVnaXN0ZXIpOwogCi0gICAgSnVtcCBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaChyZWdUMCwgcmVnVDEpOwor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCks
IHJlZ1QwLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJT
bG93UGF0aCwgcmVnVDApOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKIApAQCAtMTI1NSw3ICsxMjU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKIAotICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gocmVnVDEsIHJl
Z1QyKTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNo
KCp2bSgpLCByZWdUMSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsIHJlZ1QxKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiAKQEAgLTEyODMsNyArMTI4Myw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcikKIHsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0g
YmFycmllckJyYW5jaCgqdm0oKSwgb3duZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7CiAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSlNJbnRlcmZhY2VKSVQuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTSW50ZXJmYWNlSklUIDogcHVibGljIEND
YWxsSGVscGVycywgcHVibGljIEdQUkluZm8sIHB1YmxpYyBGUFJJbmZvIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIEpTSW50ZXJmYWNlSklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAw
KQotICAgICAgICAgICAgOiBDQ2FsbEhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICAgICAgICAg
IDogQ0NhbGxIZWxwZXJzKGNvZGVCbG9jaykKKyAgICAgICAgICAgICwgbV92bSh2bSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTc3LDYgKzc4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBpbmxpbmUgQWRkcmVzcyBpbnRQYXlsb2FkRm9yKGludCBpbmRleCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBpbmxpbmUgQWRkcmVzcyBpbnRUYWdG
b3IoaW50IGluZGV4LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
ICAgIGlubGluZSBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IGluZGV4LCBSZWdpc3RlcklEIGJhc2Ug
PSBjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAgICAgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4g
bV92bTsgfQorCisgICAgICAgIFZNKiBtX3ZtOwogICAgIH07CiAKICAgICBzdHJ1Y3QgVGh1bmtI
ZWxwZXJzIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBsb2FkQXJndW1lbnRXaXRoU3BlY2lmaWND
bGFzcyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgaW50IGFyZ3VtZW50LCBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgICAgICB7CiAgICAgICAgICAgICBsb2FkQ2Vs
bEFyZ3VtZW50KGFyZ3VtZW50LCBkc3QpOwotICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
ZHN0LCBzY3JhdGNoLCBkc3QpOworICAgICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCks
IGRzdCwgc2NyYXRjaCwgZHN0KTsKICAgICAgICAgICAgIGFwcGVuZEZhaWx1cmUoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8g
cmVsb2FkIHRoZSBhcmd1bWVudCBzaW5jZSBlbWl0TG9hZFN0cnVjdHVyZSBjbG9iYmVyZWQgaXQu
CiAgICAgICAgICAgICBsb2FkQ2VsbEFyZ3VtZW50KGFyZ3VtZW50LCBkc3QpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCwxOSArNjQsMTkgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50
ZXJWYWxpZGF0aW9uKENDYWxsSAogLy8gbGlua2luZyBoZWxwZXIgKEMrKyBjb2RlKSBkZWNpZGVz
IHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgQ0Nh
bGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICAvLyBU
aGUgY2FsbCBwdXNoZWQgYSByZXR1cm4gYWRkcmVzcywgc28gd2UgbmVlZCB0byBwb3AgaXQgYmFj
ayBvZmYgdG8gcmUtYWxpZ24gdGhlIHN0YWNrLAogICAgIC8vIGV2ZW4gdGhvdWdoIHdlIHdvbid0
IHVzZSBpdC4KICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAKICAgICBqaXQuc2V0dXBBcmd1
bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24g
ZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyCiAgICAgLy8gdG8gcGVyZm9ybSBsaW5r
aW5nIGFuZCBsYXp5IGNvbXBpbGF0aW9uIGlmIG5lY2Vzc2FyeS4gV2UgZXhwZWN0IHRoZSBjYWxs
ZWUKICAgICAvLyB0byBiZSBpbiByZWdUMC9yZWdUMSAocGF5bG9hZC90YWcpLCB0aGUgQ2FsbEZy
YW1lIHRvIGhhdmUgYWxyZWFkeQogICAgIC8vIGJlZW4gYWRqdXN0ZWQsIGFuZCBhbGwgb3RoZXIg
cmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLgotICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2
bSwgb3BlcmF0aW9uTGlua0NhbGwpOwogICAgIApAQCAtMTUxLDcgKzE1MSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24g
dGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAg
ICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwogICAg
IApAQCAtMTcwLDcgKzE3MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtG
b3IoVk0KICAgICAvLyBqdW1wIHRvIHRoZSBjYWxsZWUsIG9yIHNhdmUgdGhlIHJldHVybiBhZGRy
ZXNzIHRvIHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlCiAgICAgLy8gbWFrZSBhIEMrKyBmdW5jdGlv
biBjYWxsIHRvIHRoZSBhcHByb3ByaWF0ZSBKSVQgb3BlcmF0aW9uLgogCi0gICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlOwogICAgIApAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAvLyBIYW5kbGUgYW4gZXhjZXB0
aW9uCiAgICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOwogCi0gICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwogICAgIGppdC5z
dG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZy
YW1lKTsKIAogI2lmIENQVShYODYpICYmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0zODEsNyArMzgx
LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGppdC5h
ZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwg
SlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgaml0
Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cigqdm0pOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJuYXRpdmUg
JXMlcyB0cmFtcG9saW5lIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3Mg
PyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRo
b3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5n
KGtpbmQpLmRhdGEoKSkpOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHJhbmRvbVRodW5rR2VuZXJhdAogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KHZtKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOworICAgIGppdC5lbWl0UmFuZG9tVGh1bmsoKnZtLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwKTsKIAogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJyYW5kb20iKTsKQEAgLTEwNDUsNyArMTA0
NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVyYXQKIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSog
dm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ICAgICAKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAKQEAgLTExMzcsMTkg
KzExMzcsMTkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlv
bkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgdGhpbmcgdGhhdCBqdW1w
cyBoZXJlIG11c3QgbW92ZSBFeGNlcHRpb25UeXBlIGludG8gdGhlIGFyZ3VtZW50R1BSMSBhbmQg
anVtcCBoZXJlLgogICAgIC8vIFdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRlbXAgcmVnaXN0ZXJzIGhl
cmUsIGJ1dCBub3QgY2FsbGVlIHNhdmVzLgogICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKICAg
ICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodXNlZFJl
Z2lzdGVycyk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCp2bSwgdXNlZFJlZ2lzdGVycyk7CiAgICAgfQogCiAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAog
ICAgIHZvaWQgKCp0aHJvd1dhc21FeGNlcHRpb24pKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlv
blR5cGUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlKSB7
CiAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsMTUgKzI5
NSw0IEBAIEpTVmFsdWUgSlNDZWxsOjpnZXRQcm90b3R5cGUoSlNPYmplY3QqLCAKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEpTQ2VsbDo6aXNBbnlXYXNtQ2Fs
bGVlKFZNJiB2bSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgcmV0dXJu
IGluaGVyaXRzKHZtLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjppbmZvKCkpIHx8IGluaGVyaXRzKHZt
LCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmluZm8oKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TSh2bSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLX0KLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cmluZygp
IGNvbnN0OwogICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdDsKICAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0FueVdhc21DYWxsZWUoVk0mKSBjb25zdDsKICAgICBib29sIGlz
R2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc0N1c3RvbUdldHRlclNldHRlcigpIGNv
bnN0OwogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjYsMTEgKzEyNiwxMiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWluCiAKIEFMV0FZU19JTkxJTkUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAogewotICAg
IEFTU0VSVChjYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhbGxlZSgpLT52bSgpKTsKLSAgICBBU1NF
UlQoIWNhbGxlZSgpLT5pc0xhcmdlQWxsb2NhdGlvbigpKTsKKyAgICBKU0NlbGwqIGNhbGxlZSA9
IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOworICAgIEFTU0VSVChjYWxsZWUpOworICAgIEFTU0VS
VChjYWxsZWUtPnZtKCkpOworICAgIEFTU0VSVCghY2FsbGVlLT5pc0xhcmdlQWxsb2NhdGlvbigp
KTsKICAgICAvLyBUaGlzIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gc2luY2Ugd2UgYWNj
ZXNzIHRoaXMgc28gb2Z0ZW4uCi0gICAgcmV0dXJuICpjYWxsZWUoKS0+bWFya2VkQmxvY2soKS52
bSgpOworICAgIHJldHVybiAqY2FsbGVlLT5tYXJrZWRCbG9jaygpLnZtKCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDYgQEAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlQ29tcGlsYXRp
b24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VGVExDb21w
aWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgbG9nQ29tcGls
YXRpb25DaGFuZ2VzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBwcmlu
dEVhY2hPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2YWxp
ZGF0ZUdyYXBoLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBpbnRwdHJfdCBTdGFja0ZyYW1l
Ojpzb3VyY2VJRCgpIGNvbnN0CiAKIFN0cmluZyBTdGFja0ZyYW1lOjpzb3VyY2VVUkwoKSBjb25z
dAogeworICAgIGlmIChtX2lzV2FzbUZyYW1lKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJbd2FzbSBjb2RlXSIpOworCiAgICAgaWYgKCFtX2NvZGVCbG9jaykgewotICAgICAgICBpZiAo
bV9jYWxsZWUgJiYgbV9jYWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW3dhc20gY29kZV0iKTsKICAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW25hdGl2ZSBjb2RlXSIpOwogICAgIH0KIApAQCAtNTYsNiAr
NTcsOSBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6c291cmNlVVJMKCkgY29uc3QKIAogU3RyaW5nIFN0
YWNrRnJhbWU6OmZ1bmN0aW9uTmFtZShWTSYgdm0pIGNvbnN0CiB7CisgICAgaWYgKG1faXNXYXNt
RnJhbWUpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIjx3YXNtPiIpOworCiAgICAgaWYg
KG1fY29kZUJsb2NrKSB7CiAgICAgICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBFdmFsQ29kZToKQEAgLTcwLDEyICs3NCwxMSBAQCBTdHJpbmcgU3Rh
Y2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkgCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KKwogICAgIFN0cmluZyBuYW1lOwogICAgIGlmICht
X2NhbGxlZSkgewogICAgICAgICBpZiAobV9jYWxsZWUtPmlzT2JqZWN0KCkpCiAgICAgICAgICAg
ICBuYW1lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPiht
X2NhbGxlZS5nZXQoKSkpLmltcGwoKTsKLSAgICAgICAgZWxzZSBpZiAobV9jYWxsZWUtPmlzQW55
V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQotICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiPHdhc20+Iik7CiAgICAgfQogICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1wdHlT
dHJpbmcoKSA6IG5hbWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgY2xh
c3MgSlNPYmplY3Q7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgorICAgIFN0YWNrRnJh
bWUoKSA9IGRlZmF1bHQ7CisKICAgICBTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBjYWxsZWUp
CiAgICAgICAgIDogbV9jYWxsZWUodm0sIGNhbGxlZSkKICAgICB7IH0KQEAgLTQ1LDYgKzQ3LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQog
ICAgIHsgfQogCisgICAgc3RhdGljIFN0YWNrRnJhbWUgd2FzbSgpCisgICAgeworICAgICAgICBT
dGFja0ZyYW1lIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faXNXYXNtRnJhbWUgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgaGFzTGluZUFuZENvbHVt
bkluZm8oKSBjb25zdCB7IHJldHVybiAhIW1fY29kZUJsb2NrOyB9CiAgICAgCiAgICAgdm9pZCBj
b21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29u
c3Q7CkBAIC02NSw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgU3Ryb25nPEpTQ2VsbD4gbV9jYWxs
ZWUgeyB9OwogICAgIFN0cm9uZzxDb2RlQmxvY2s+IG1fY29kZUJsb2NrIHsgfTsKICAgICB1bnNp
Z25lZCBtX2J5dGVjb2RlT2Zmc2V0IHsgVUlOVF9NQVggfTsKLSAgICAKKyAgICBib29sIG1faXNX
YXNtRnJhbWUgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwzMCArMjMxLDMwIEBAIHByaXZhdGU6CiAg
ICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZTsgLy8gRklYTUU6IG1ha2UgdGhpcyBsYXp5IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3OTIKIH07CiAKLXN0YXRpYyBW
YWx1ZSogbG9hZFdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2sp
CitzdGF0aWMgVmFsdWUqIGxvYWRXYXNtQ29udGV4dChWTSogdm0sIFByb2NlZHVyZSYgcHJvYywg
QmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
YmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIHBvaW50ZXJUeXBlKCksIE9y
aWdpbigpKTsKICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHROZWVkc01hY3Jv
U2NyYXRjaFJlZ2lzdGVyKCkpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCi0gICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBDQ2FsbEhlbHBl
cnM6OmxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICBq
aXQubG9hZFdhc21Db250ZXh0KHZtLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKIAog
ICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJZGVudGl0eSwgT3JpZ2lu
KCksIHBhdGNocG9pbnQpOwogfQogCi1zdGF0aWMgdm9pZCBzdG9yZVdhc21Db250ZXh0KFByb2Nl
ZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBhcmcpCitzdGF0aWMgdm9pZCBz
dG9yZVdhc21Db250ZXh0KFZNKiB2bSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
aywgVmFsdWUqIGFyZykKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9j
ay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9yaWdpbigpKTsK
ICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hS
ZWdpc3RlcigpKQogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNy
b1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVk
VmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKAotICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0Nh
bGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKTsK
LSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dCgqdm0sIHBhcmFtc1swXS5ncHIoKSk7CiAgICAg
ICAgIH0pOwogfQogCkBAIC0yOTksNyArMjk5LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihWTSYgdm0sIGNvbgogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFt
ZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2Ms
IE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKLSAgICBtX2luc3RhbmNlVmFsdWUgPSBsb2Fk
V2FzbUNvbnRleHQobV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisgICAgbV9pbnN0YW5jZVZhbHVl
ID0gbG9hZFdhc21Db250ZXh0KCZtX3ZtLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIH0KIAog
c3RydWN0IE1lbW9yeUJhc2VBbmRTaXplIHsKQEAgLTMyMCw5ICszMjAsOSBAQCBzdGF0aWMgTWVt
b3J5QmFzZUFuZFNpemUgZ2V0TWVtb3J5QmFzZUFuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3QgTWVtb3J5SW5m
b3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJhc2lj
QmxvY2sqIGJsb2NrKQorc3RhdGljIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUo
Vk0mIHZtLCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSogaW5zdGFuY2Us
IFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgc3RvcmVXYXNtQ29u
dGV4dChwcm9jLCBibG9jaywgaW5zdGFuY2UpOworICAgIHN0b3JlV2FzbUNvbnRleHQoJnZtLCBw
cm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAgICAgICAgIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01l
bW9yeShFeHByZXMKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdyb3dNZW1vcnkpKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBkZWx0YSk7CiAKLSAgICByZXN0b3JlV2ViQXNzZW1i
bHlHbG9iYWxTdGF0ZShtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgbV9j
dXJyZW50QmxvY2spOworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1fdm0sIG1f
aW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAK
ICAgICByZXR1cm4geyB9OwogfQpAQCAtOTI5LDcgKzkyOSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBjYWxs
IGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBv
ciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCi0gICAgICAgIHJlc3RvcmVXZWJBc3Nl
bWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBj
b250aW51YXRpb24pOworICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX3Zt
LCBtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgY29udGludWF0aW9uKTsK
ICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5z
ZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBl
KHJldHVyblR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQpIHsKQEAgLTEwMjMsNyArMTAyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnMKICAgICAgICAgfSk7CiAKICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJl
ZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBt
b2RpZmllZCBvdXIgTWVtb3J5LgotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1f
aW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7Cisg
ICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV92bSwgbV9pbmZvLm1lbW9yeSwgbV9p
bnN0YW5jZVZhbHVlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIAogICAgIHJldHVybiB7IH07
CiB9CkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3Qg
VmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUlu
dGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCitzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2Fz
bUludGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQg
PSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIApAQCAtMTE5Myw3ICsxMTkz
LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbAogCiAgICAgaWYg
KCEhaW5mby5tZW1vcnkpIHsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdz
LmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KGJhc2VNZW1v
cnkpOworICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KHZtLCBiYXNlTWVtb3J5KTsKICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICBj
b25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKICAgICAgICAg
QVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKQEAgLTEyNTUsNyArMTI1NSw3IEBAIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW4KICAgICAgICAgcmVzdWx0LT53YXNt
RW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKICAgICB9CiAKLSAgICBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoY29tcGlsYXRpb25D
b250ZXh0LCAqcmVzdWx0LCBzaWduYXR1cmUsIGluZm8pOworICAgIGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcih2bSwgY29tcGlsYXRpb25Db250ZXh0LCAqcmVzdWx0LCBzaWduYXR1cmUsIGluZm8pOwog
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAg
Y29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzQ0MgPSBqc2NDYWxsaW5nQ29udmVudGlvbigp
OwogICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldCh2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdCh2bSwgbnVsbHB0cik7CisgICAgSklU
IGppdChudWxscHRyKTsKIAogICAgIC8vIEJlbG93LCB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2Fs
bGluZyBjb252ZW50aW9uIGlzIGFsd2F5cyBvbiB0aGUgc3RhY2suCiAgICAgQVNTRVJUKCFqc0ND
Lm1fZ3ByQXJncy5zaXplKCkpOwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaGFzQmFkSTY0
VXNlKSB7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAg
ICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
ICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBpbnQz
Ml90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAogICAgICAgICAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CkBAIC0zMzUsNyArMzM1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB3YXNtVG9KcyhWTQogICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CiAgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwog
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRpb25DaGVja3Mu
YXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkpOworICAgICAgICBleGNlcHRpb25DaGVj
a3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAgIGZsb2F0
ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2Fz
bVRvSnMoVk0KICAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICAg
ICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVu
ZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBkb3VibGUgKCpj
b252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwpAQCAtMzg4LDcgKzM4OCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRv
SnMoVk0KIAogICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAgICAgICAgZXhj
ZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
ICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcigpOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgd2FzbVRvV2FzbSgKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgaml0LnN0b3Jl
V2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7CisgICAgaml0LnN0b3JlV2FzbUNvbnRleHQoKnZtLCBi
YXNlTWVtb3J5KTsKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRo
YXQgYWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVy
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8v
IFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBt
ZW1vcnkgc2l6ZSByZWdpc3RlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24g
b2xkU2lnQnVzSGFuZGxlcgogc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnU2VndkhhbmRs
ZXI7CiBzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CiBzdGF0aWMg
U3RhdGljTG9jayBjb2RlTG9jYXRpb25zTG9jazsKLXN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
SGFzaFNldDxzdGQ6OnR1cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICh2bSwgc3RhcnQsIGVuZCkKK3N0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6
OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAodm0sIHN0YXJ0LCBlbmQp
CiAKIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpCiB7CkBAIC04MSwxMiArODEsMTMgQEAgc3RhdGljIHZvaWQgdHJh
cEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaQogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVzcyIpOwogICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwogICAgICAgICAg
ICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0aW9ucy5nZXQoKSkgewotICAgICAgICAgICAg
ICAgIFZNKiB2bTsKICAgICAgICAgICAgICAgICB2b2lkKiBzdGFydDsKICAgICAgICAgICAgICAg
ICB2b2lkKiBlbmQ7Ci0gICAgICAgICAgICAgICAgc3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0g
cmFuZ2U7CisgICAgICAgICAgICAgICAgc3RkOjp0aWUoc3RhcnQsIGVuZCkgPSByYW5nZTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJh
d1BvaW50ZXIoc3RhcnQpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihlbmQpKTsKICAgICAgICAgICAg
ICAgICBpZiAoc3RhcnQgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbiAmJiBmYXVsdGluZ0luc3RydWN0
aW9uIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOgorICAgICAgICAgICAg
ICAgICAgICBWTSogdm0gPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIGRvbid0IGhhdmUgYSBzdHViIHRoZW4g
d2Ugc2hvdWxkIGp1c3QgdHJlYXQgdGhpcyBsaWtlIGEgcmVndWxhciBjcmFzaC4KQEAgLTEwOCwy
MCArMTA5LDIwIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWwsIHNpZ2kKICAg
ICAgICAgc2lnYWN0aW9uKHNpZ25hbCwgJm9sZFNpZ1NlZ3ZIYW5kbGVyLCBudWxscHRyKTsKIH0K
IAotdm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQordm9p
ZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKIHsKICAgICBpZiAoIWZhc3RN
ZW1vcnlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihj
b2RlTG9jYXRpb25zTG9jayk7Ci0gICAgY29kZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90dXBs
ZSgmdm0sIHN0YXJ0LCBlbmQpKTsKKyAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1
cGxlKHN0YXJ0LCBlbmQpKTsKIH0KIAotdm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQq
IHN0YXJ0LCB2b2lkKiBlbmQpCit2b2lkIHVucmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lk
KiBlbmQpCiB7CiAgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwotICAgIGNvZGVMb2Nh
dGlvbnMtPnJlbW92ZShzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7CisgICAgY29k
ZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZShzdGFydCwgZW5kKSk7CiB9CiAKIGJv
b2wgZmFzdE1lbW9yeUVuYWJsZWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAkocmV2aXNpb24gMjE0NDIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKLXZvaWQgcmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7Ci12b2lk
IHVucmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7Cit2b2lkIHJlZ2lz
dGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3RlckNvZGUodm9p
ZCogc3RhcnQsIHZvaWQqIGVuZCk7CiAKIGJvb2wgZmFzdE1lbW9yeUVuYWJsZWQoKTsKIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTIgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbgogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKIAogICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7Ci0gICAg
V2FzbTo6cmVnaXN0ZXJDb2RlKHZtLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYo
KS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+
Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOworICAgIFdhc206OnJlZ2lzdGVy
Q29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQorV2ViQXNzZW1ibHlDYWxsZWU6On5XZWJBc3NlbWJseUNhbGxlZSgp
CiB7Ci0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpT
V2ViQXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKLSAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSgqY2Vs
bC0+dm0oKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCku
ZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKLSAgICB0aGlz
T2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOworICAg
IFdhc206OnVucmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigp
LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDYWxsZWUuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwz
NCArMzQsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxs
ZWUgOiBwdWJsaWMgSlNDZWxsIHsKK2NsYXNzIFdlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViQXNzZW1ibHlDYWxsZWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJl
SXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjcmVhdGUoVk0m
IHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMgUmVmPFdlYkFz
c2VtYmx5Q2FsbGVlPiYmIGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAg
ICB7Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxsZWU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5
Q2FsbGVlKHZtKTsKLSAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShl
bnRyeXBvaW50KSk7Ci0gICAgICAgIHJldHVybiBjYWxsZWU7CisgICAgICAgIFdlYkFzc2VtYmx5
Q2FsbGVlKiBjYWxsZWUgPSBuZXcgV2ViQXNzZW1ibHlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqY2FsbGVlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCi0gICAgewotICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQogICAgIHZvaWQqIGVudHJ5cG9p
bnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOyB9Ci0KICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lz
dGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYp
OwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAgICBXZWJBc3NlbWJseUNhbGxlZShX
YXNtOjpFbnRyeXBvaW50JiYpOworICAgIH5XZWJBc3NlbWJseUNhbGxlZSgpOwogCiAgICAgV2Fz
bTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305549</attachid>
            <date>2017-03-27 20:13:11 -0700</date>
            <delta_ts>2017-03-27 20:31:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>173647</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ4MSw2ICsxNDgxLDcgQEAKIAkJNzk2NDY1NkExQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2
NUMyMTYxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xv
cmluZy5jcHAgKi87IH07CiAJCTc5NjVDMjE3MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk2REFBMkIxRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkRB
QTJBMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8q
IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhl
bHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OTdFMDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsg
fTsKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdF
MDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDAxMyw2ICs0
MDE0LDcgQEAKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTY1QzIxNDFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOyBwYXRoID0g
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmg7IHBhdGggPSBiMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGVlQml0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTcwMiw2ICs1
NzA0LDcgQEAKIAkJCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAg
Ki8sCiAJCQkJMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCAqLywKIAkJ
CQlBN0Y4NjkwRTBGOTU4NEExMDA1NTg2OTcgLyogQ2FjaGVkQ2FsbC5oICovLAorCQkJCTc5NkRB
QTJBMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggKi8sCiAJCQkJMTQyOUQ4REIwRUQy
MjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAv
KiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCkBAIC04ODExLDYgKzg4MTQsNyBAQAogCQkJCTc5QjE3
ODhFMUQzOTlCODAwMEIxQTU2NyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlBRjBCRTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMDIxQkZCRTU2MTAwMzhCQkNBIC8qIEpJVE11bEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk2REFBMkIxRTg5Q0NENjAwNURGMjRBIC8q
IENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOTlCMjQ5MUMyNEMzRDMwMEM4MjE1
OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTREMTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNBMDZD
MDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgQ29tcGlsYXRpb24gY29tcGlsZShWTSYgdm0sIFBy
b2NlZHVyZSYgcAogICAgIAogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MsIG9wdExldmVs
KTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2
bSwgaml0LCBudWxscHRyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEzNCw3ICsxMzEzNCw3IEBAIHZvaWQgdGVzdEVudHJ5U3dp
dGNoU2ltcGxlKCkKICAgICAKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jKTsKICAgICAK
LSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdl
bmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBu
dWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkBAIC0xMzE2Nyw3ICsxMzE2Nyw3IEBA
IHZvaWQgdGVzdEVudHJ5U3dpdGNoTm9FbnRyeVN3aXRjaCgpCiAgICAgCiAgICAgcHJlcGFyZUZv
ckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkp
OwpAQCAtMTMyNTQsNyArMTMyNTQsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25Q
YXRocygpCiAgICAgCiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAg
Q0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0
ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwpAQCAtMTMzNzEsNyArMTMzNzEsNyBAQCB2b2lk
IHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgcHJlcGFyZUZv
ckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkp
OwpAQCAtMTM0NDksNyArMTM0NDksNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaExvb3AoKQogICAg
IAogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MpOwogICAgIAotICAgIENDYWxsSGVscGVy
cyBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50
cnlwb2ludExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVz
dGFpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0
YWlyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci90ZXN0YWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBWTSogdm07CiBz
dGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb21waWxlKEIzOjpQcm9jZWR1cmUmIHBy
b2MpCiB7CiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYy5jb2RlKCkpOwotICAgIENDYWxs
SGVscGVycyBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJv
Yy5jb2RlKCksIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxs
cHRyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNyArNzY3LDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgaml0LnJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbm9FeGNlcHRpb24gPQotICAgICAgICAgICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhD
Q2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICAgICAgaml0LmVt
aXRFeGNlcHRpb25DaGVjayh2bSwgQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNr
KTsKIAogICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlLmVt
aXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgaml0LnJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4
Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNl
cHRpb25DaGVjayh2bSwgQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwogICAgICAg
ICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKQEAgLTk1OSw3
ICs5NTksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAg
ICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFz
dC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0CiAgICAgICAgICAgICAvLyB3aGF0ZXZl
ciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2Ug
dG8gYnJhbmNoIHRvIHNsb3cKICAgICAgICAgICAgIC8vIHBhdGguCi0gICAgICAgICAgICBqaXQu
bnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KHNjcmF0Y2hHUFIsIGJhc2VHUFIpOworICAg
ICAgICAgICAgaml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseSh2bSwgc2NyYXRjaEdQ
UiwgYmFzZUdQUik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IHN0cnVj
dHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSgpLT5pZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ET01KSVRBY2Nlc3NDYXNlUGF0
Y2hwb2ludFBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RPTUpJVEFjY2Vzc0Nhc2VQYXRjaHBvaW50UGFyYW1zLmNwcAkocmV2aXNpb24gMjE0
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RPTUpJVEFjY2Vzc0Nhc2VQ
YXRjaHBvaW50UGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGppdC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwogICAgICAgICBqaXQucmVj
bGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IG5vRXhjZXB0aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVy
dGVkRXhjZXB0aW9uQ2hlY2spOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRp
b24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLm1fdm0sIENDYWxsSGVscGVyczo6SW52
ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAKICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3Rl
cnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKICAgICAg
ICAgZXhjZXB0aW9ucy5hcHBlbmQoaml0Lmp1bXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NDIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDExICszNSwxMCBAQAogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSW5s
aW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKFZNJiB2bSkKK3ZvaWQgSW5saW5lQWNj
ZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKCkKIHsKICAgICBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOwogICAgIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOwpAQCAtNTAsNyAr
NDksNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAjZW5kaWYK
IAogICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgICAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gdmFsdWU7CiAgICAgICAg
IGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5
cGVBbmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CkBAIC02NSw3ICs2NCw3IEBAIHZvaWQgSW5saW5l
QWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICB9CiAKICAgICB7Ci0gICAgICAgIEND
YWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgICAg
ICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCkBAIC04Miw3ICs4MSw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXpl
c0FuZENyYXMKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCkBAIC05NSw3ICs5NCw3
IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICB9CiAKICAg
ICB7Ci0gICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCkBAIC0xMDksNyArMTA4LDcgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzIGppdCgmdm0pOworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgICAgIGpp
dC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwKQEAgLTE1NSw5ICsxNTQsOSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2Rl
SW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBY2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewot
ICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAog
ICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
R1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwpAQCAt
MjExLDExICsyMTAsMTEgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3Bl
cgogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFZNJiB2bSwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgb2Zmc2V0KSk7CiAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJ
bmZvLnZhbHVlUmVncygpOwpAQCAtMjU1LDExICsyNTQsMTEgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndAogICAgICAgICB8fCBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQ29udGlndW91czsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoaXNDYWNo
ZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKIAotICAgIENDYWxsSGVscGVycyBq
aXQoJnZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdz
IHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CkBAIC0yNzksOSArMjc4LDkgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoVgogICAgIHJldHVybiBsaW5rZWRDb2Rl
SW5saW5lOwogfQogCi12b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChWTSYgdm0s
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgdGFyZ2V0KQor
dm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQpCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBhdXRvIGp1bXAgPSBqaXQuanVt
cCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxOCArMTEwLDE4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwogICAgIHN0YXRpYyBib29sIGNhbkdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoVk0mLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0
aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVB
cnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7
Ci0gICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcChWTSYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgQ29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIHZvaWQgcmV3aXJl
U3R1YkFzSnVtcChTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsKTsKIAogICAg
IC8vIFRoaXMgaXMgaGVscGZ1bCB3aGVuIGRldGVybWluaW5nIHRoZSBzaXplIG9mIGFuIElDIG9u
CiAgICAgLy8gdmFyaW91cyBwbGF0Zm9ybXMuIFdoZW4gYWRkaW5nIGEgbmV3IHR5cGUgb2YgSUMs
IGltcGxlbWVudAogICAgIC8vIGl0cyBwbGFjZWhvbGRlciBjb2RlIGhlcmUsIGFuZCBsb2cgdGhl
IHNpemUuIFRoYXQgd2F5IHdlCiAgICAgLy8gY2FuIGludGVsbGlnZW50bHkgY2hvb3NlIHNpemVz
IG9uIHZhcmlvdXMgcGxhdGZvcm1zLgotICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGlj
IHZvaWQgZHVtcENhY2hlU2l6ZXNBbmRDcmFzaChWTSYpOworICAgIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggc3RhdGljIHZvaWQgZHVtcENhY2hlU2l6ZXNBbmRDcmFzaCgpOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NiwxNCArMTc2LDE0IEBAIENhbGxTaXRlSW5kZXggQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpvcmkKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRp
b25IYW5kbGVyKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwotICAgIGppdC0+Y29weUNhbGxl
ZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC0+Y29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihtX3ZtKTsKICAgICBpZiAo
bmVlZHNUb1Jlc3RvcmVSZWdpc3RlcnNJZkV4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIFRvIHRo
ZSBKSVQgdGhhdCBwcm9kdWNlcyB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAg
ICAgIC8vIGNhbGwgc2l0ZSwgdGhleSB3aWxsIGV4cGVjdCB0aGUgT1NSIGV4aXQgdG8gYmUgYXJy
aXZlZAogICAgICAgICAvLyBhdCBmcm9tIGdlbmVyaWNVbndpbmQuIFRoZXJlZm9yZSB3ZSBtdXN0
IG1vZGVsIHdoYXQgZ2VuZXJpY1Vud2luZAogICAgICAgICAvLyBkb2VzIGhlcmUuIEkuZSwgc2V0
IGNhbGxGcmFtZUZvckNhdGNoIGFuZCBjb3B5IGNhbGxlZSBzYXZlcy4KIAotICAgICAgICBqaXQt
PnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQtPnZtKCktPmFkZHJlc3NP
ZkNhbGxGcmFtZUZvckNhdGNoKCkpOworICAgICAgICBqaXQtPnN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBtX3ZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIgPSBq
aXQtPmp1bXAoKTsKIAogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc2VydCBhIG5ldyBl
eGNlcHRpb24gaGFuZGxlciBpbiB0aGUgdGFibGUKQEAgLTE5NSwxMyArMTk1LDEzIEBAIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9yaWdpbmFsSGFuZGxl
ci5uYXRpdmVDb2RlKTsKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGpp
dC0+c2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC0+dm0oKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LT5zZXR1cEFyZ3VtZW50
cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJm1fdm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5k
bGVyQ2FsbCA9IGppdC0+Y2FsbCgpOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25I
YW5kbGVyKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICBqaXQtPmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIoKTsKKyAgICAgICAgaml0LT5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKG1fdm0pOwogICAg
IH0KIH0KIApAQCAtMzU4LDcgKzM1OCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1v
cnBoaWNBY2Nlc3MKIAogICAgIHN0YXRlLnNjcmF0Y2hHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CiAgICAgCi0gICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9ICZqaXQ7
CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShy
ZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEyICsxNzcsMTQgQEAgcHJpdmF0
ZToKIH07CiAKIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewotICAgIEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSgpCi0gICAgICAgIDogbV9jYWxjdWxhdGVkUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKGZhbHNlKQorICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZShWTSYgdm0p
CisgICAgICAgIDogbV92bSh2bSkgCisgICAgICAgICwgbV9jYWxjdWxhdGVkUmVnaXN0ZXJzRm9y
Q2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKGZhbHNlKQogICAgICAgICAsIG1fbmVlZHNUb1Jlc3Rv
cmVSZWdpc3RlcnNJZkV4Y2VwdGlvbihmYWxzZSkKICAgICAgICAgLCBtX2NhbGN1bGF0ZWRDYWxs
U2l0ZUluZGV4KGZhbHNlKQogICAgIHsKICAgICB9CisgICAgVk0mIG1fdm07CiAgICAgQ0NhbGxI
ZWxwZXJzKiBqaXQgeyBudWxscHRyIH07CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKiBh
bGxvY2F0b3I7CiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBw
cmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIEpJVENvbXBp
bGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQotICAgIDogQ0NhbGxIZWxwZXJzKCZkZmcubV92
bSwgZGZnLm1fY29kZUJsb2NrKQorICAgIDogQ0NhbGxIZWxwZXJzKGRmZy5tX2NvZGVCbG9jaykK
ICAgICAsIG1fZ3JhcGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2Rl
KCkpKQogICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKQEAgLTEzOSw3ICsxMzks
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlCiAgICAgaWYgKCFt
X2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKLSAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOwor
ICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSgpKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
IGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZy
YW1lKikuCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKQEAgLTE1MywxMyArMTUzLDEzIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVF
eGNlcHRpb25IYW5kbGUKICNlbmRpZgogICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1Jl
Y29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKIAot
ICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIoKnZtKCkpOwogICAgIH0KIAogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1w
dHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAg
IGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7
CiAKICAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3Vt
ZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIodm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0xNzIsNyAr
MTcyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogI2VuZGlm
CiAgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoKSwgbG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOwogCi0gICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAg
ICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQogCkBAIC0yNzgs
NyArMjc4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
IAogICAgIGZvciAoYXV0byYgcmVjb3JkIDogbV9qc0NhbGxzKSB7CiAgICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpyZWNvcmQuaW5mbzsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHJlY29y
ZC5zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBsaW5rQnVmZmVy
LmxpbmsocmVjb3JkLnNsb3dDYWxsLCBGdW5jdGlvblB0cih2bSgpLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAg
IGluZm8uc2V0Q2FsbExvY2F0aW9ucygKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5zbG93Q2FsbCkpLAogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC50YXJnZXRU
b0NoZWNrKSksCkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgp
CiAKICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFi
bGUgaW4gdGhlIEpTU3RhY2suCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4
aXQoKSAtIDEpLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgSnVtcCBzdGFja092ZXJmbG93ID0gYnJh
bmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+YWRkcmVzc09mU29mdFN0YWNrTGlt
aXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBicmFuY2hQ
dHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgp
KSwgR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
KCkKICAgICBtX3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZD
b2RlKCk7CiAKLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZm
ZXI+KCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigqdm0oKSwg
KnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5r
QnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLmZp
bmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPihtX2dyYXBoLm1fcGxh
bik7CiAgICAgICAgIHJldHVybjsKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlRnVuY3Rpb24oKQogICAgIExhYmVsIGZyb21Bcml0eUNoZWNrKHRoaXMpOwogICAg
IC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0
aGUgSlNTdGFjay4KICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpIC0g
MSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBKdW1wIHN0YWNrT3ZlcmZsb3cgPSBicmFuY2hQdHIo
QWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgIEp1bXAgc3RhY2tPdmVyZmxvdyA9IGJyYW5jaFB0cihBYm92
ZSwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJ
bmZvOjpyZWdUMSk7CiAKICAgICAvLyBNb3ZlIHRoZSBzdGFjayBwb2ludGVyIGRvd24gdG8gYWNj
b21tb2RhdGUgbG9jYWxzCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9p
bnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBzZXRFbmRPZkNvZGUoKTsKIAogICAgIC8v
ID09PSBMaW5rID09PQotICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlu
a0J1ZmZlcj4oKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KCp2
bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYg
KGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX3Bs
YW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgu
bV9wbGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDk5LDcgKzQ5OSw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwog
ICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAg
IAotICAgIGxpbmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKG1f
dm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVwLCBGdW5jdGlv
blB0cigodm0oKS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKICAgICAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAK
QEAgLTYyNCwxMSArNjI0LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4Y2VwdGlvbkNoZWNrKCkK
ICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9u
SW5NYWNoaW5lRnJhbWUobV9zcGVjdWxhdGl2ZS0+bV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4
aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOyAKICAgICBpZiAod2lsbENhdGNo
RXhjZXB0aW9uKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4ID0gbV9zcGVjdWxhdGl2
ZS0+bV9vdXRPZkxpbmVTdHJlYW1JbmRleCA/ICptX3NwZWN1bGF0aXZlLT5tX291dE9mTGluZVN0
cmVhbUluZGV4IDogbV9zcGVjdWxhdGl2ZS0+bV9zdHJlYW0tPnNpemUoKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhhZEV4Y2VwdGlvbiA9IGVt
aXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygqdm0oKSk7CiAgICAgICAgIC8vIFdlIGFzc3Vt
ZSBoZXJlIHRoYXQgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgY2FsbE9wZWFydGlvbigpL2FwcGVuZENh
bGwoKSBpcyBjYWxsZWQuCiAgICAgICAgIGFwcGVuZEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdChF
eGNlcHRpb25DaGVjaywgc3RyZWFtSW5kZXgsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRs
ZXIsIG1faml0Q29kZS0+Y29tbW9uLmxhc3RDYWxsU2l0ZSgpLCBoYWRFeGNlcHRpb24pOwogICAg
IH0gZWxzZQotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNo
ZWNrKCkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNo
ZWNrKCp2bSgpKSk7CiB9CiAKIENhbGxTaXRlSW5kZXggSklUQ29tcGlsZXI6OnJlY29yZENhbGxT
aXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb25zdCBDb2Rl
T3JpZ2luJiBjYWxsU2l0ZUNvZGVPcmlnaW4sIHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5kZXgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lv
biAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZXhjZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgIHsKLSAgICAgICAgbV9l
eGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25D
aGVjaygpKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2su
YXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjaygqdm0oKSkpOwogICAgIH0KIAogICAgIC8vIEFkZCBh
IGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0
IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KICAgICB2b2lkIGZhc3RFeGNlcHRp
b25DaGVjaygpCiAgICAgewotICAgICAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworICAgICAgICBj
YWxsRXhjZXB0aW9uRnV6eigqdm0oKSk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CiAgICAgfQog
ICAgIApAQCAtMjY4LDYgKzI2OCw4IEBAIHB1YmxpYzoKIAogICAgIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI7IH0KIAorICAgIFZNKiB2bSgpIHsgcmV0dXJuICZtX2dyYXBoLm1fdm07
IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQbGFjZWhvbGRlcjsK
ICAgICAKQEAgLTMwMCw2ICszMDIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIFZlY3RvcjxMYWJl
bD4gbV9ibG9ja0hlYWRzOwogCisKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKICAgICAgICAg
SlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0
YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgICAgICAgICA6IGZhc3RDYWxs
KGZhc3RDYWxsKQpAQCAtMzQyLDYgKzM0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExhYmVsIHNs
b3dQYXRoOwogICAgICAgICBDYWxsTGlua0luZm8qIGluZm87CiAgICAgfTsKKwogICAgIAogICAg
IFZlY3RvcjxJbmxpbmVDYWNoZVdyYXBwZXI8SklUR2V0QnlJZEdlbmVyYXRvcj4sIDQ+IG1fZ2V0
QnlJZHM7CiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3I+LCA0PiBtX2dldEJ5SWRzV2l0aFRoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNp
b24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiw4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBv
cGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVy
YW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292
ZXJ5KQogewotICAgIC8vIFByby1mb3JtYSBzdHVmZi4KLSAgICBpZiAoT3B0aW9uczo6cHJpbnRF
YWNoT1NSRXhpdCgpKSB7Ci0gICAgICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVi
dWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKLSAgICAgICAgZGVidWdJ
bmZvLT5jb2RlQmxvY2sgPSBtX2ppdC5jb2RlQmxvY2soKTsKLSAgICAgICAgZGVidWdJbmZvLT5r
aW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgICAgIGRlYnVnSW5mby0+Ynl0ZWNvZGVPZmZzZXQgPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwotICAgICAgICAKLSAgICAgICAgbV9qaXQu
ZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5m
byk7Ci0gICAgfQotICAgIAogICAgIC8vIFBlcmZvcm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRo
aXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KICAgICAvLyBzdGFydHMg
bXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFs
cmVhZHkgbWFkZS4KICAgICAKQEAgLTE2MCw3ICsxNTAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgCiAKICAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIEdQUnMg
aW50byB0aGUgc2NyYXRjaCBidWZmZXIuCiAgICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXplKCkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
b3BlcmFuZHMuc2l6ZSgpKTsKICAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hC
dWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgOiAwOwogICAgIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKQEAgLTI1NSw3ICsyNDUsNyBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgbV9qaXQuZW1pdFNhdmVDYWxsZWVT
YXZlc0ZvcihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpKTsKIAogICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBtX2ppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIG1faml0LmNvcHlDYWxsZWVTYXZlc1Rv
Vk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOwogCiAgICAgLy8gRG8gYWxsIGRhdGEg
Zm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4K
ICAgICAKQEAgLTQwMyw3ICszOTMsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhtX2ppdCwgZXhpdCk7CiAgICAg
CiAgICAgLy8gQW5kIGZpbmlzaC4KLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4
aXQpOworICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldCh2bSwgbV9qaXQsIGV4aXQpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDIwICszOCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLXZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCBPU1JFeGl0
JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0
aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQordm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KFZNJiB2bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVy
eT4mIG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKIHsKICAgICBtX2pp
dC5qaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogCi0gICAgLy8gUHJvLWZvcm1hIHN0dWZmLgotICAg
IGlmIChPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpIHsKLSAgICAgICAgU3BlY3VsYXRpb25G
YWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJ
bmZvOwotICAgICAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOwot
ICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVidWdJbmZv
LT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAg
ICAgIAotICAgICAgICBtX2ppdC5kZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0
aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKLSAgICB9Ci0gICAgCiAgICAgLy8gUGVyZm9ybSBzcGVj
dWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJh
dGlvbgogICAgIC8vIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBz
cGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgogICAgIApAQCAtMTg0LDcgKzE3NCw3IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKIAogICAgIC8vIFNhdmUg
YWxsIHN0YXRlIGZyb20gR1BScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KICAgICAKLSAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7CisgICAgU2Ny
YXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXplKCkpOwogICAgIEVuY29kZWRKU1ZhbHVl
KiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
c2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgCiAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewpAQCAtMjY1LDcg
KzI1NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBt
X2ppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQu
aXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIG1faml0LmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgbV9qaXQuY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CiAKICAgICAvLyBEbyBhbGwg
ZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0
YWNrLgogICAgIApAQCAtMzkwLDcgKzM4MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKG1faml0LCBleGl0KTsK
IAogICAgIC8vIEFuZCBmaW5pc2guCi0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KG1faml0LCBl
eGl0KTsKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQodm0sIG1faml0LCBleGl0KTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDYsMTMgKzE0NiwxMyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5z
cGVjdWxhdGlvblJlY292ZXJ5W2V4aXQubV9yZWNvdmVyeUluZGV4XTsKIAogICAgIHsKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdChjb2RlQmxvY2spOwogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGpp
dCk7CiAKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsKICAgICAg
ICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2Ug
YXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCiAgICAgICAgICAgICAvLyBTbywgd2Ug
bXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAg
ICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cigpOworICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigqdm0pOwogICAgICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICAgICAgfQogICAgICAgICBqaXQuYWRkUHRyKApAQCAtMTcxLDcgKzE3MSw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgaml0LmFkZDY0KENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhw
cm9maWxlckV4aXQtPmNvdW50ZXJBZGRyZXNzKCkpKTsKICAgICAgICAgfQogCi0gICAgICAgIGV4
aXRDb21waWxlci5jb21waWxlRXhpdChleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOworICAgICAg
ICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoKnZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3Zlcnkp
OwogICAgICAgICAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29k
ZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYsIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZvaWQg
Y29tcGlsZUV4aXQoVk0mLCBjb25zdCBPU1JFeGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0
UmVzdG9yZUFyZ3VtZW50cyhjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyAr
MjY3LDcgQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwogICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKIH0KIAotdm9pZCBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQor
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgT1NSRXhpdEJhc2UmIGV4aXQpCiB7CiAgICAgaml0Lm1lbW9yeUZlbmNlKCk7CiAgICAgCkBA
IC0zMDksNyArMzA5LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJz
JgogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAg
IC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxG
cmFtZUZvckNhdGNoLgotICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGppdC52bSgpLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsKKyAgICAgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2bS5hZGRyZXNzT2ZDYWxs
RnJhbWVGb3JDYXRjaCgpKTsKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIGhhbmRsZUV4aXRDb3VudHMo
Q0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKIHZvaWQgcmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwotdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKK3ZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiwgQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJh
c2UmKTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgogdm9pZCBhZGp1c3RGcmFt
ZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGlsZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSog
dm0sIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjE0
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3Rp
bGxWYWxpZCgpOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAg
Ym9vbCBuZWdhdGVSZXN1bHQgPSB0cnVlOwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVl
VG9Cb29sZWFuKGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1
ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CisgICAgICAgIG1faml0LmVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1faml0LnZtKCksIGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0
R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CiAg
ICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE5NzksNyArMTk3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSogbm8KIAogICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgbV9qaXQuZW1pdENv
bnZlcnRWYWx1ZVRvQm9vbGVhbih2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFs
dWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9v
bGVhbigqbV9qaXQudm0oKSwgdmFsdWVSZWdzLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVl
RlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSLCBub3RUYWtlbik7CiAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7
CiAKQEAgLTU1MzAsNyArNTUzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKIAotICAgICAgICBtX2ppdC5lbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKKyAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQu
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CkBAIC01NTUyLDcgKzU1NTIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2Ny
YXRjaDIuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgICAgIG1faml0
LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlz
VmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlUmVncyB0aGlzUmVn
cyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZQogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2Nh
bEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQ
UiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShhcmdHUFIsIHJlc3VsdEdQ
Uiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2pp
dC52bSgpLCBhcmdHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQu
Y29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1v
dGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaAogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2Nh
bEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQ
UiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShhcmdHUFIsIHJlc3VsdEdQ
Uiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2pp
dC52bSgpLCBhcmdHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJhbmNo
UHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2Jh
bE9iamVjdEdQUiwgdGFrZW4pOwogCkBAIC0xODc2LDcgKzE4NzYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSk7CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodmFsdWVHUFIs
IHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0
dXJlKCptX2ppdC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVVc2UsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0xOTgyLDcgKzE5ODIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgICAgICBzY3JhdGNoR1BSID0gc2Ny
YXRjaC0+Z3ByKCk7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBuZWdhdGVSZXN1bHQgPSB0cnVl
OwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzKGFy
ZzFHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZw
cigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVn
YXRlUmVzdWx0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqbV9q
aXQudm0oKSwgSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFs
dWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOwogICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47
CkBAIC0yMDI3LDcgKzIwMjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JP
dGhlckJyCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1
cmUodmFsdWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmVt
aXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVVc2UsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTIxNTUsNyArMjE1NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgIHZhbHVl
LnVzZSgpOwogCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAg
ICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLCB0ZW1wRlBSLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBtX2pp
dC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRlbXBGUFIsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKICAgICAKICAgICAgICAg
ICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtl
bik7CiAgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKQEAgLTQxMTgsNyArNDExOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
UmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJ
bmxpbmVDYXBhY2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwogICAgICAgICBtX2ppdC5lbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBpbmxpbmVDYXBhY2l0eUdQUik7Ci0g
ICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVH
UFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKICAgICAgICAgCkBAIC00MTQ0LDcgKzQxNDQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgYWxsb2Nh
dG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0
Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbV9q
aXQubXV0YXRvckZlbmNlKCk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0o
KSk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRo
LCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJlKSk7CiAgICAg
ICAgIApAQCAtNDc0MSw3ICs0NzQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9j
YWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2Jq
ZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsK
LSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZhbHVlLmdwcigpLCByZXN1bHQu
Z3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1
cmUoKm1faml0LnZtKCksIHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkp
OwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQu
Z3ByKCksIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmpl
Y3RHUFIpOyAKICAgICAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGlsZXI6OkVxdWFs
LCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICB9CkBAIC01NzAyLDcgKzU3MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzaGFkb3dQYWNrZXQo
dGhpcyk7CiAgICAgICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSBzaGFkb3dQYWNrZXQuZ3By
KCk7CiAKLSAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgICAgIG1faml0LmVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdw
cigpOwpAQCAtNTcyNCw3ICs1NzI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2hhZG93UGFja2V0KHRoaXMpOwogICAg
ICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gc2hhZG93UGFja2V0LmdwcigpOwogCi0gICAg
ICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgICAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KCptX2ppdC52bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CiAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MgPSBKU1ZhbHVlUmVncyh0aGlz
VmFsdWUuZ3ByKCkpOwpAQCAtNjAwNyw3ICs2MDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlTmV3QQogICAgIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJy
YXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAKLSAgICBtX2ppdC5tdXRhdG9y
RmVuY2UoKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogICAgIAogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9y
V2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgCiAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVPdXRP
ZkxpbmVTdG9yYWdlKHN0b3JhZ2VHUFIsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0YXRvckZlbmNl
KCptX2ppdC52bSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldExlbmd0aChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGxlbmd0aEdQUiwgYm9vbCBp
bmNsdWRlVGhpcykKQEAgLTg3Miw3ICs4NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FycmF5KE5vZGUqIG5vCiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwotICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGJh
c2VSZWcsIHRlbXAuZ3ByKCksIHRlbXAyLmdwcigpKTsKKyAgICBtX2ppdC5lbWl0TG9hZFN0cnVj
dHVyZSgqbV9qaXQudm0oKSwgYmFzZVJlZywgdGVtcC5ncHIoKSwgdGVtcDIuZ3ByKCkpOwogICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLAogICAgICAgICBtX2ppdC5icmFuY2hQdHIoCkBAIC0xNzQ1
LDcgKzE3NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5k
bGluZygpICYmIChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpICE9IERvZXNO
b3RFeGl0IHx8IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwoKSkpCi0gICAgICAgICAgICBtX2pp
dC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIG1faml0LmppdFJl
bGVhc2VBc3NlcnROb0V4Y2VwdGlvbigqbV9qaXQudm0oKSk7CiAKICAgICAgICAgbV9qaXQucGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKCkuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKSwgbV9vcmlnaW4uc2VtYW50aWMpOwogCkBAIC0zMDg1LDcgKzMwODUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBwZXJmb3Jt
RGVmYXVsdEhhc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoUHJveHlPYmplY3RUeXBlKSk7Ci0gICAg
bV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoc2NyYXRjaFJlZywgc2NyYXRjaFJlZywgc2NyYXRjaDJS
ZWcpOworICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBzY3JhdGNoUmVn
LCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsg
Q2VsbFBheWxvYWRPZmZzZXQpLCBzY3JhdGNoUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2Ny
YXRjaFJlZywgcHJvdG90eXBlUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDAyMiw3ICs0
MDIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIH0K
ICAgICBtX2ppdC5zdG9yZTMyKGFsbG9jYXRvckdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgIAotICAgIG1faml0Lm11
dGF0b3JGZW5jZSgpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAg
CiAgICAgc3dpdGNoIChudW1PcEdQUnMpIHsKICAgICBjYXNlIDI6CkBAIC02MzIxLDcgKzYzMjEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsT2JqCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKG9iamVjdC5ncHIoKSwgcmVzdWx0LmdwcigpLCBzY3Jh
dGNoLmdwcigpKTsKKyAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgb2Jq
ZWN0LmdwcigpLCByZXN1bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOwogICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiB9CkBAIC02NDUwLDcgKzY0NTAsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xh
c3NUeXBlPiB2b2lkIFNwZWN1CiAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZXhlY3V0YWJsZSksIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0T2ZFeGVjdXRhYmxlKSk7CiAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRPZlJh
cmVEYXRhKSk7CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqIG5vZGUpCkBAIC02NjUyLDcgKzY2NTIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShTY29wZU9mZnNldChpKSkp
KTsKICAgICB9CiAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCkBAIC02ODE1LDcgKzY4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAg
ICB9CiAgICAgICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIG1faml0Lm11dGF0
b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAgICAgIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KQEAgLTcwMzgsNyArNzAzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMp
LCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMihKU0ZpeGVk
QXJyYXk6Om9mZnNldE9mRGF0YSgpKSwgc2NyYXRjaDFHUFIpOwogCi0gICAgICAgIG1faml0LmVt
aXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpTRml4ZWRBcnJheT4ocmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5t
X3ZtLmZpeGVkQXJyYXlTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJp
YWJsZVNpemVkQ2VsbDxKU0ZpeGVkQXJyYXk+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLm1f
dm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRml4ZWRBcnJheTo6b2Zmc2V0
T2ZTaXplKCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGFyZ3VtZW50LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7
CkBAIC03MDgwLDcgKzcwODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFk
KE5vZGUqCiAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAgICAgbV9qaXQu
bXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1w
KCksIHRoaXMsIG9wZXJhdGlvblNwcmVhZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBhcmd1bWVudCkp
OwpAQCAtNzM4Miw3ICs3MzgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U2xpY2UoTgogICAgICAgICAgICAgZW1pdEFsbG9jYXRlQnV0dGVyZmx5KHN0b3JhZ2VSZXN1bHRH
UFIsIHNpemVHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCByZXN1bHRHUFIsIHNsb3dDYXNl
cyk7CiAgICAgICAgICAgICBlbWl0SW5pdGlhbGl6ZUJ1dHRlcmZseShzdG9yYWdlUmVzdWx0R1BS
LCBzaXplR1BSLCBlbXB0eVZhbHVlUmVncywgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBlbWl0
QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIHRlbXBWYWx1ZSwgc3RvcmFnZVJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7Ci0gICAgICAgICAg
ICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgq
bV9qaXQudm0oKSk7CiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0ZDo6bWFr
ZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU3RydWN0dXJlVmFyaWFibGVT
aXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCB0ZW1wVmFsdWUsIHNpemVHUFIs
IHN0b3JhZ2VSZXN1bHRHUFIsIHNjcmF0Y2hHUFIpKTsKQEAgLTc3NDUsNyArNzc0NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOdWtlU3RydWN0dXIKICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwog
ICAgIAotICAgIG1faml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShzdG9yYWdlR1BS
LCBiYXNlR1BSKTsKKyAgICBtX2ppdC5udWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkoKm1f
aml0LnZtKCksIHN0b3JhZ2VHUFIsIGJhc2VHUFIpOwogICAgIAogICAgIG5vUmVzdWx0KG5vZGUp
OwogfQpAQCAtODE4NCw3ICs4MTg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d1N0cmluZ09iagogICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTV3Jh
cHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAjZW5kaWYKICAgICAKLSAgICBtX2ppdC5tdXRhdG9y
RmVuY2UoKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogICAgIAogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgcmVzdWx0R1BSLCBvcGVyYW5kR1BSLCBub2Rl
LT5zdHJ1Y3R1cmUoKSkpOwpAQCAtODI2Myw3ICs4MjYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJy
YXkpLAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkpOwogICAgIAotICAgIG1faml0Lm11dGF0b3JGZW5j
ZSgpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAgICAgCiAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZSksCkBAIC05MzMyLDkg
KzkzMzIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyCiAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IG9rOwogICAgIAogICAgIGlmIChpc0ZlbmNlZCkgewotICAg
ICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaChiYXNlR1BSLCBzY3JhdGNoMUdQUikp
OworICAgICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaCgqbV9qaXQudm0oKSwgYmFz
ZUdQUiwgc2NyYXRjaDFHUFIpKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vRmVuY2UgPSBtX2ppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5l
ZWRlZCgqbV9qaXQudm0oKSk7CiAgICAgICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CiAgICAgICAg
IG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKGJhc2VHUFIpKTsKICAg
ICAgICAgbm9GZW5jZS5saW5rKCZtX2ppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4ODksNyArMjg4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgU3Ry
dWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNo
R1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIG1faml0LmVtaXRBbGxv
Y2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJl
LCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoLCBzaXplKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENsYXNzVHlwZT4o
Km1faml0LnZtKCksIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNsb3dQYXRoLCBzaXplKTsKICAgICB9CiAKICAgICAvLyBDb252ZW5pZW5j
ZSBhbGxvY2F0b3IgZm9yIGEgYnVpbHQtaW4gb2JqZWN0LgpAQCAtMjg5NywyMCArMjg5NywyMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BS
LCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwKICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09i
amVjdDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlSlNP
YmplY3Q8Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3Jh
Z2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0
cnVjdHVyZVR5cGUgYW5kIFN0b3JhZ2VUeXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZv
aWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFN0
cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNs
b3dQYXRoKQogICAgIHsKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZEpT
T2JqZWN0PENsYXNzVHlwZT4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBz
Y3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFs
bG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0PENsYXNzVHlwZT4oKm1faml0LnZtKCksIHJlc3Vs
dEdQUiwgc3RydWN0dXJlLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzbG93UGF0aCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgog
ICAgIHZvaWQgZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIs
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1Bh
dGgpCiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVPYmplY3Q8
Q2xhc3NUeXBlPihyZXN1bHRHUFIsIHN0cnVjdHVyZS5nZXQoKSwgc2NyYXRjaEdQUjEsIHNjcmF0
Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZURlc3RydWN0aWJs
ZU9iamVjdDxDbGFzc1R5cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0cnVjdHVyZS5nZXQo
KSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQogCiAgICAgdm9p
ZCBlbWl0QWxsb2NhdGVSYXdPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVj
dHVyZSwgR1BSUmVnIHN0b3JhZ2VHUFIsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNw
cAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50
cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwg
bnVsbHB0cik7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxscHRyKTsKIAogICAgIC8vIFdl
IGdldCBwYXNzZWQgdGhlIGFkZHJlc3Mgb2YgYSBzY3JhdGNoIGJ1ZmZlci4gVGhlIGZpcnN0IDgt
Ynl0ZSBzbG90IG9mIHRoZSBidWZmZXIKICAgICAvLyBpcyB0aGUgZnJhbWUgc2l6ZS4gVGhlIHNl
Y29uZCA4LWJ5dGUgc2xvdCBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSB3ZSBhcmUgc3VwcG9zZWQg
dG8KQEAgLTEzNSw3ICsxMzUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVu
a0dlbmVyCiAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdVbnJlYXNvbmFibGVPU1JFbnRyeUp1
bXBEZXN0aW5hdGlvbik7CiAKICAgICBvay5saW5rKCZqaXQpOwotICAgIGppdC5yZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICBqaXQucmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAg
ICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKICAgICBqaXQuanVt
cChHUFJJbmZvOjpyZWdUMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxNiArMTI2LDE2IEBAIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAvLyBXZSB3aWxsIGFkZCBl
eGNlcHRpb24gaGFuZGxlcnMgd2hpbGUgZ2VuZXJhdGluZy4KICAgICBjb2RlQmxvY2stPmNsZWFy
RXhjZXB0aW9uSGFuZGxlcnMoKTsKIAotICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxv
Y2spOworICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICBCMzo6Z2VuZXJhdGUo
KnN0YXRlLnByb2MsIGppdCk7CiAKICAgICAvLyBFbWl0IHRoZSBleGNlcHRpb24gaGFuZGxlci4K
ICAgICAqc3RhdGUuZXhjZXB0aW9uSGFuZGxlciA9IGppdC5sYWJlbCgpOwotICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaml0LnZtKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cigpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICBqaXQuYWRkTGlu
a1Rhc2soCiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
aAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRG
aW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRG
R0ZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiRlRMSklUQ29kZS5oIgotI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAy
MTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVy
YXRlKENvZGVCbG9jayogYwogCiAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKIAotICAg
IENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKICAgICBHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOwogICAgIHBhcmFtcy5leGNlcHRpb25KdW1wcyA9
IG1fZXhjZXB0aW9uVGFyZ2V0ID8gJmV4Y2VwdGlvbkp1bXBzIDogbnVsbHB0cjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBl
bnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZl
cmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5
IG9yIG5vdC4KLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtC
dWZmZXI+IGxpbmtCdWZmZXI7CiAKQEAgLTE0MiwxMSArMTQyLDExIEBAIHZvaWQgbGluayhTdGF0
ZSYgc3RhdGUpCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sg
PSBqaXQuY2FsbCgpOwogCiAgICAgICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmJyYW5j
aDMyKENDYWxsSGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLSAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSk7CiAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwog
CiAgICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjE0NDIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDAsOSArMjAwLDExIEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGhhdCB3b3Vs
ZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KICAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxvY2soKSkp
LCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogCisgICAgICAgIFZNKiB2
bSA9ICZ0aGlzLT52bSgpOworCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNrLgogICAg
ICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291
bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJzb2x1dGVBZGRyZXNzIGFkZHJlc3NPZlN0YWNrTGltaXQodm0oKS5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzT2ZTdGFja0xpbWl0KHZtLT5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKTsKICAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBzdGFja092ZXJmbG93SGFuZGxlciA9IG1fb3V0LnBhdGNocG9pbnQo
Vm9pZCk7CiAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5k
ZXhGb3JDb2RlT3JpZ2luKG1fZnRsU3RhdGUsIENvZGVPcmlnaW4oMCkpOwogICAgICAgICBzdGFj
a092ZXJmbG93SGFuZGxlci0+YXBwZW5kU29tZVJlZ2lzdGVyKG1fY2FsbEZyYW1lKTsKQEAgLTIy
NiwxNiArMjI4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OwotICAgICAgICAgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOwogCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHRocm93Q2FsbCA9IGppdC5jYWxs
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC5j
YWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkBAIC02NDQ4LDcgKzY0NTAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9
IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25B
cmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+
YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNl
cHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUt
PnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVs
cGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CkBAIC02NzU1LDcgKzY3NTcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9
IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25B
cmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+
YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNl
cHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUt
PnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVs
cGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6
ZSgpOwpAQCAtNjk0Miw3ICs2OTQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
QXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFz
c2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVs
cGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRo
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmUgPSBqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NDIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsMTIgKzE4MSwxMiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YigKICAgICAvLyBUaGlzIGNvZGUgcmVxdWlyZXMgZnJhbWVQb2ludGVyUmVnaXN0ZXIgaXMgdGhl
IHNhbWUgYXMgY2FsbEZyYW1lUmVnaXN0ZXIKICAgICBzdGF0aWNfYXNzZXJ0KE1hY3JvQXNzZW1i
bGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Ik1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciBhbmQgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIgbXVzdCBiZSB0aGUgc2FtZSIpOwogCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSwgY29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAKICAgICAv
LyBUaGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBkbyBpcyByZXN0YWJsaXNoIG91ciBmcmFtZSBp
biB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCiAgICAgaWYgKGV4aXQuaXNHZW5lcmljVW53aW5k
SGFuZGxlcigpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5jYWxsRnJhbWVGb3JDYXRj
aCk7IC8vIFRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGlzIGV4aXQsIGxpa2UgYXQgYWxsIG90aGVy
IHRpbWVzLCB0aGlzIGZpZWxkIHNob3VsZCBiZSBub24tbnVsbC4KLSAgICAgICAgaml0LnJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAg
ICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KCp2bSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZtLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRj
aCgpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgCiAg
ICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQpOwogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoaml0LCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoaml0LCBleGl0KTsKKyAg
ICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoKnZtLCBqaXQsIGV4aXQpOwogICAgIAogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUg
PSBGSU5BTElaRV9DT0RFX0lGKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTEg
QEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2Fs
bEtleS5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLWNsYXNzIFN0YXRlOwotCiBj
bGFzcyBTbG93UGF0aENhbGwgewogcHVibGljOgogICAgIFNsb3dQYXRoQ2FsbCgpIHsgfQpAQCAt
NzksNyArNzgsNyBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5
cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
KiBleGNlcHRpb25UYXJnZXQsCisgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3Qq
IGV4Y2VwdGlvblRhcmdldCwKICAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3Vs
dEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgU2xvd1BhdGhDYWxsIGNh
bGw7CkBAIC04OSwxMyArODgsMTMgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAg
ICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVlKCkpOwogICAgIH0KICAg
ICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVu
ZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLnZtKCkpKTsKICAgICByZXR1cm4gY2FsbDsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KIFNsb3dQYXRoQ2FsbCBj
YWxsT3BlcmF0aW9uKAotICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAorICAgIFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQ
UiwKICAgICBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKIHsKQEAgLTEwNCw3ICsxMDMsNyBA
QCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKICAgICB9Ci0gICAg
cmV0dXJuIGNhbGxPcGVyYXRpb24odXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRpb25UYXJnZXQs
IGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7CisgICAgcmV0dXJuIGNhbGxPcGVy
YXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlv
biwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOwogfQogCiBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRlJiwgQ29kZU9yaWdpbik7CkBAIC0xMTUsNyArMTE0LDcg
QEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwg
QXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24o
Ci0gICAgICAgIHVzZWRSZWdpc3RlcnMsIGppdCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4o
c3RhdGUsIGNvZGVPcmlnaW4pLCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLAorICAgICAgICBz
dGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihzdGF0
ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sCiAgICAgICAgIHJlc3Vs
dCwgYXJndW1lbnRzLi4uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIGNsYXNzIFN0YXRlIHsKIHB1
YmxpYzoKICAgICBTdGF0ZShERkc6OkdyYXBoJiBncmFwaCk7CiAgICAgflN0YXRlKCk7CisKKyAg
ICBWTSYgdm0oKSB7IHJldHVybiBncmFwaC5tX3ZtOyB9CiAgICAgCiAgICAgLy8gTm9uZSBvZiB0
aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBv
ZgogICAgIC8vIEZUTCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2Yg
dGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgZW51bSBj
bGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAogICAgIFZNKiB2bSwgRnVu
Y3Rpb25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBl
eHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgZnJh
bWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKIHsKLSAgICBBc3NlbWJseUhlbHBlcnMg
aml0KHZtLCAwKTsKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogCiAgICAgaWYg
KGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgPT0gRnJhbWVBbmRTdGFja0FkanVz
dG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKSB7CiAgICAgICAgIC8vIFRoaXMgbmVlZHMgdG8gaGFw
cGVuIGJlZm9yZSB3ZSB1c2UgdGhlIHNjcmF0Y2ggYnVmZmVyIGJlY2F1c2UgdGhpcyBmdW5jdGlv
biBhbHNvIHVzZXMgdGhlIHNjcmF0Y2ggYnVmZmVyLgpAQCAtMTY2LDcgKzE2Niw3IEBAIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFzc2VtYmwKIAogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBrZXkpCiB7Ci0gICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0sIDApOworICAgIEFzc2Vt
Ymx5SGVscGVycyBqaXQoMCk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBzYXZlIHRoZSBnaXZl
biByZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3ZSB3YW50IHRvIHNhdmUgdGhl
CiAgICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBwYXN0IHRoYXQgb2Zmc2V0LCBh
bmQgdGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMTQ0MjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw4IEBAIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OnRvcE9m
RnJhbWVJbnRlcm5hbCgKIAogSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6dm1FbnRyeUdsb2Jh
bE9iamVjdCgpCiB7Ci0gICAgaWYgKGNhbGxlZSgpLT5pc09iamVjdCgpKSB7IAorICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxlZSgpLmlzQ2VsbCgpKTsKKyAgICBpZiAoY2FsbGVlKCkuYXNDZWxsKCkt
PmlzT2JqZWN0KCkpIHsgCiAgICAgICAgIGlmICh0aGlzID09IGxleGljYWxHbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpKQogICAgICAgICAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3Qo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgorI2luY2x1ZGUgIkNhbGxlZUJp
dHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdp
c3Rlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgpAQCAtODgsNyArODksNyBAQCBuYW1l
c3BhY2UgSlNDICB7CiAKICAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsgfQogICAgICAgICBK
U09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNh
bGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5ib3hlZENlbGwoKTsgfQorICAgICAgICBD
YWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJh
bWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KICAgICAgICAgU1VQUFJFU1NfQVNBTiBKU1Zh
bHVlIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlXS5hc2FuVW5zYWZlSlNWYWx1ZSgpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVy
Ojpjb2RlQmxvY2soKTsgfQogICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbGVlQml0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsZWVCaXRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxlZTsKK30KKwor
Y2xhc3MgSlNDZWxsOworCitjbGFzcyBDYWxsZWVCaXRzIHsKK3B1YmxpYzoKKyAgICBDYWxsZWVC
aXRzKCkgPSBkZWZhdWx0OworICAgIENhbGxlZUJpdHModm9pZCogcHRyKSA6IG1fcHRyKHB0cikg
eyB9IAorCisgICAgQ2FsbGVlQml0cyYgb3BlcmF0b3I9KEpTQ2VsbCogY2VsbCkKKyAgICB7Cisg
ICAgICAgIG1fcHRyID0gY2VsbDsKKyAgICAgICAgQVNTRVJUKCFpc1dhc20oKSk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIGlzV2FzbSgpIGNvbnN0IHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIDE7IH0KKyAgICBib29sIGlzQ2VsbCgp
IGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIDE7IH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBhc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc1dhc20oKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPiht
X3B0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBXYXNtOjpXZWJBc3NlbWJseUNhbGxl
ZSogYXNXYXNtQ2FsbGVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1dhc20oKSk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqPihi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3B0cikgJiB+MSk7CisgICAgfQorCisgICAgdm9pZCog
cmF3UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCogbV9wdHIgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTQgQEAgcHVibGlj
OgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNh
cHR1cmUpIHsKLSAgICAgICAgICAgIGlmICghdmlzaXRvci0+aXNXYXNtRnJhbWUoKQotICAgICAg
ICAgICAgICAgICYmICEhdmlzaXRvci0+Y29kZUJsb2NrKCkKLSAgICAgICAgICAgICAgICAmJiAh
dmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0
aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKQorICAgICAg
ICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZTo6d2FzbSgpKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3ItPmNvZGVCbG9j
aygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAg
ICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFt
ZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3It
PmJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3Zt
LCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0
b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSht
X3ZtLCAgdmlzaXRvci0+Y2FsbGVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFt
ZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSkpOwogICAgICAgICAgICAgfQogICAg
IAogICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CiAgICAgICAgIGludDMyX3QmIHRhZygpOwogCisgICAg
ICAgIHZvaWQqIHBvaW50ZXIoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVnaXN0ZXIgd2l0
aEludChpbnQzMl90IGkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVyIHIgPSBqc051
bWJlcihpKTsKQEAgLTE5NSw2ICsxOTcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAg
ICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjpwb2ludGVyKCkgY29uc3QK
KyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHUuZW5jb2RlZFZhbHVl
LnB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBheWxvYWQo
KSk7CisjZW5kaWYKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgUmVnaXN0ZXI6
OnBheWxvYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHUuZW5jb2RlZFZhbHVlLmFz
Qml0cy5wYXlsb2FkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsMTAgKzE1NSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFt
ZShDCiAgICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxl
clZNRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9p
c1dhc21GcmFtZSA9IGZhbHNlOwogCi0gICAgSlNDZWxsKiBjYWxsZWUgPSBjYWxsRnJhbWUtPmNh
bGxlZSgpOworICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAg
ICBtX2ZyYW1lLm1fY2FsbGVlID0gY2FsbGVlOwogCi0gICAgaWYgKGNhbGxlZS0+aXNBbnlXYXNt
Q2FsbGVlKCpjYWxsZWUtPnZtKCkpKSB7CisgICAgaWYgKGNhbGxlZS5pc1dhc21GcmFtZSgpKSB7
CiAgICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fZnJhbWUu
bV9jb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZzZXQg
PSAwOwpAQCAtMjU0LDE0ICsyNTQsOCBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNp
dG9yOjpGcmFtCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGlzV2FzbUZyYW1l
KCkpIHsKLSAgICAgICAgaWYgKEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oKmNhbGxlZS0+dm0oKSwgY2FsbGVlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAg
ICAgICAgICAgLy8gT3RoZXIgd2FzbSBjYWxsZWVzIChlLmcsIHN0dWJzKSBkb24ndCB1c2UgY2Fs
bGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyBub3RoaW5nIG5lZWRzCi0gICAgICAgICAgICAvLyB0byBi
ZSByZXN0b3JlZCBmb3IgdGhlbS4KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IHRoaXMtPmNhbGxlZSgp
LmFzV2FzbUNhbGxlZSgpOworICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKQEAgLTI3
Niw3ICsyNzAsNiBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9yOjpGcmFtCiBT
dHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsKICAgICBT
dHJpbmcgdHJhY2VMaW5lOwotICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCk7CiAK
ICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKICAgICBjYXNlIENvZGVUeXBlOjpXYXNtOgpAQCAt
Mjg4LDEyICsyODEsMTQgQEAgU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFt
ZQogICAgIGNhc2UgQ29kZVR5cGU6Ok1vZHVsZToKICAgICAgICAgdHJhY2VMaW5lID0gQVNDSUlM
aXRlcmFsKCJtb2R1bGUgY29kZSIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvZGVUeXBl
OjpOYXRpdmU6CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOiB7CisgICAgICAgIEpTQ2VsbCog
Y2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChjYWxsZWUpCiAg
ICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1l
KCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KGNhbGxlZSkpLmltcGwoKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246Ci0gICAgICAgIHRyYWNlTGluZSA9IGdl
dENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0
Kj4oY2FsbGVlKSkuaW1wbCgpOworICAgIH0KKyAgICBjYXNlIENvZGVUeXBlOjpGdW5jdGlvbjog
CisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUo
KS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4odGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCkpKS5pbXBs
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDoKICAgICAgICAg
dHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJnbG9iYWwgY29kZSIpOwpAQCAtNDU1LDcgKzQ1MCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmUKICAgICAgICAgICAg
IG91dC5wcmludChpbmRlbnQsICJJbmxpbmVDYWxsRnJhbWU6ICIsIFJhd1BvaW50ZXIobV9pbmxp
bmVDYWxsRnJhbWUpLCAiXG4iKTsKICNlbmRpZgogCi0gICAgICAgIG91dC5wcmludChpbmRlbnQs
ICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnBy
aW50KGluZGVudCwgImNhbGxlZTogIiwgUmF3UG9pbnRlcihjYWxsZWUoKS5yYXdQdHIoKSksICJc
biIpOwogICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAicmV0dXJuUEM6ICIsIFJhd1BvaW50ZXIo
cmV0dXJuUEMpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNhbGxlckZyYW1l
OiAiLCBSYXdQb2ludGVyKGNhbGxlckZyYW1lKSwgIlxuIik7CiAgICAgICAgIHVuc2lnbmVkIGxv
Y2F0aW9uUmF3Qml0cyA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVBc1Jhd0JpdHMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KICAgICAgICAgYm9vbCBjYWxsZXJJc1ZNRW50
cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNWTUVudHJ5RnJhbWU7IH0KICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVyRnJhbWU7
IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQor
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7
IH0KICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVjb2RlT2Zmc2V0OyB9CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
KCkgY29uc3QgewpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAgICAgVk1FbnRyeUZy
YW1lKiBtX1ZNRW50cnlGcmFtZTsKICAgICAgICAgVk1FbnRyeUZyYW1lKiBtX0NhbGxlclZNRW50
cnlGcmFtZTsKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwotICAgICAgICBKU0Nl
bGwqIG1fY2FsbGVlOworICAgICAgICBDYWxsZWVCaXRzIG1fY2FsbGVlOwogICAgICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICAgICAgc2l6
ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMSwyNCArMzAxLDI0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRB
cmd1bWVudEMKIAogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAotdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6aml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJiB2bSkKIHsKICAgICBKdW1wIG5vRXhj
ZXB0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbm9FeGNlcHRpb24gPSBicmFuY2hUZXN0
NjQoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7Cisg
ICAgbm9FeGNlcHRpb24gPSBicmFuY2hUZXN0NjQoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtLmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG5vRXhj
ZXB0aW9uID0gYnJhbmNoMzIoRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZF
eGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbm9FeGNlcHRpb24gPSBicmFuY2gz
MihFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3Rl
ZEltbTMyKDApKTsKICNlbmRpZgogICAgIGFib3J0V2l0aFJlYXNvbihKSVRVbmNvdWdodEV4Y2Vw
dGlvbkFmdGVyQ2FsbCk7CiAgICAgbm9FeGNlcHRpb24ubGluayh0aGlzKTsKIH0KIAotdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpjYWxsRXhjZXB0aW9uRnV6eihWTSYgdm0pCiB7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VFeGNl
cHRpb25GdXp6KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVuY29kZWRKU1ZhbHVlKiBidWZm
ZXIgPSB2bSgpLT5leGNlcHRpb25GdXp6aW5nQnVmZmVyKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cykpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSB2bS5leGNlcHRpb25GdXp6aW5nQnVm
ZmVyKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtMzU0LDIzICszNTQsMjMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNl
cHRpb25GdXp6KAogICAgIH0KIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1i
bHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKFZNJiB2bSkKIHsKLSAgICByZXR1cm4gZW1p
dEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICByZXR1cm4gZW1pdEV4
Y2VwdGlvbkNoZWNrKHZtLCBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiB9CiAKLUFzc2VtYmx5SGVs
cGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25D
aGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQorQXNzZW1ibHlIZWxwZXJz
OjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKFZNJiB2bSwgRXhjZXB0
aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKLSAgICBjYWxs
RXhjZXB0aW9uRnV6eigpOworICAgIGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKIAogICAgIGlmICh3
aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAgICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVj
ayk7CiAgICAgCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXN1
bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8g
OiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAg
ICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5v
blplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mRXhjZXB0aW9uKCkpKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBO
b3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2
bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgcmVzdWx0
ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1
YWwsIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0z
MigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQpA
QCAtMzgyLDE1ICszODIsMTUgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVy
czo6ZQogICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6
SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygpCitB
c3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uUGF0Y2hhYmxlRXhj
ZXB0aW9uQ2hlY2soVk0mIHZtKQogewotICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CisgICAgY2Fs
bEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHZt
KCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0gYnJhbmNoVGVzdDY0KE5v
blplcm8sIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsK
KyAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJl
c3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC00NDksMTIgKzQ0OSwxMiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBk
ZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRT
dHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdp
c3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBU1NFUlQoZGVzdCAh
PSBzY3JhdGNoKTsKICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNlLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKLSAgICBsb2FkUHRyKHZtKCktPmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmJhc2UoKSwgc2NyYXRjaCk7CisgICAgbG9hZFB0cih2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gpOwogICAgIGxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBkZXN0LCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIGRlc3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CkBAIC01
NDksMTAgKzU0OSwxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKEpT
CiAgICAgZW1pdFJhbmRvbVRodW5rSW1wbCgqdGhpcywgc2NyYXRjaDAsIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgcmVzdWx0LCBsb2FkRnJvbUhpZ2gsIHN0b3JlVG9IaWdoLCBsb2FkRnJvbUxvdywgc3Rv
cmVUb0xvdyk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoR1BS
UmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNj
cmF0Y2gzLCBGUFJSZWcgcmVzdWx0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21U
aHVuayhWTSYgdm0sIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCkKIHsKICAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjcmF0Y2gzKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoMywgc2NyYXRjaDMsIHNjcmF0Y2gwKTsKKyAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaDMsIHNjcmF0Y2gzLCBzY3JhdGNoMCk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gzLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgc2NyYXRjaDMpOwogICAgIC8vIE5vdywgc2NyYXRjaDMgaG9sZHMgSlNHbG9iYWxPYmplY3Qq
LgogCkBAIC01NzMsMTAgKzU3MywxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKEdQCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxs
ZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKFZNJiB2bSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
LSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBtX3ZtLT5nZXRBbGxD
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFs
bENhbGxlZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAg
IFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVn
aXN0ZXJzKCk7CiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5z
aXplKCk7CiAKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFsaWRHUFJSZWcp
OwogCi0gICAgbG9hZFB0cigmbV92bS0+dG9wVk1FbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICBs
b2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNlcHQgZm9yIHRo
ZSBzY3JhdGNoLgpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjp3YW5n
c0ludDY0SGFzaChHUFIKIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFzRlBSLCBGUFJSZWcg
dGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFzRlBSLCBGUFJS
ZWcgdGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQogewogICAgIC8vIElt
cGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgc3RydWN0dXJlOgogICAgIC8vIGlm
ICh2YWx1ZSBpcyBib29sZWFuKSB7CkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUbwogICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZh
bGlkR1BSUmVnKTsKICAgICAgICAgSnVtcExpc3QgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
OwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwotICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZS5wYXlsb2FkR1BSKCksIHJlc3VsdCwgc2NyYXRjaCk7
CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZS5wYXlsb2FkR1BSKCksIHJlc3Vs
dCwgc2NyYXRjaCk7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBz
Y3JhdGNoKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgc2NyYXRjaCkpOwogICAgICAgICAvLyBXZSBhY3QgbGlrZSB3ZSBhcmUgInVuZGVm
aW5lZCIgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOCBAQCB0eXBlZGVm
IHZvaWQgKCpWX0RlYnVnT3BlcmF0aW9uX0VQUCkoRXhlCiAKIGNsYXNzIEFzc2VtYmx5SGVscGVy
cyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiBwdWJsaWM6Ci0gICAgQXNzZW1ibHlIZWxwZXJz
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV92bSh2bSkKLSAgICAg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgQXNzZW1ibHlIZWxwZXJzKENvZGVCbG9j
ayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAg
LCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRl
cm5hdGl2ZSgpIDogMCkKICAgICB7CiAgICAgICAgIGlmIChtX2NvZGVCbG9jaykgewpAQCAtNjIs
NyArNjEsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KICAg
ICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9CiAK
ICAgICB2b2lkIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCkKQEAgLTMzNSwxNSArMzMzLDE1
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9KQor
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihW
TSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVn
aXN0ZXJzLmdldEZyZWVHUFIoMCk7CiAKLSAgICAgICAgbG9hZFB0cigmbV92bS0+dG9wVk1FbnRy
eUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVt
cDEpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2
ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOwogCi0gICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IG1fdm0tPmdldEFsbENhbGxlZVNhdmVSZWdpc3Rl
ck9mZnNldHMoKTsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVz
ID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgICAgICBSZWdpc3Rl
clNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwog
ICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsK
ICAgICAgICAgCkBAIC0zNjEsOSArMzU5LDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0g
ICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihWTSYpOwogCi0gICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1wUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwpAQCAtMzc0
LDEwICszNzIsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogCiAg
ICAgICAgIC8vIENvcHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5zYXZlZCBjYWxs
ZWVTYXZlcyBpbiByZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAgICAgICBsb2Fk
UHRyKCZtX3ZtLT50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgbG9hZFB0cigmdm0u
dG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1F
bnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7CiAK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gbV92bS0+Z2V0
QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgICAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRz
KCk7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgICAgICBSZWdpc3RlclNldCBk
b250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwogICAgICAg
ICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKQEAgLTk3
Myw2MiArOTcxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDU7CiAg
ICAgfQogCi0gICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qg
b24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgotICAgIHZvaWQgZGVidWdDYWxsKFZfRGVidWdP
cGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIHNp
emVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0gICAgICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX3ZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
Y3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKLSNlbHNlCi0gICAgICAgICAgICBzdG9yZTMyKEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOwotI2VuZGlmCi0gICAgICAgIH0KLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IHN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUg
c2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0KLSNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8
IENQVShNSVBTKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZ3VtZW50KSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBz
ZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotI2VsaWYgQ1BVKFg4NikKLSAgICAgICAgcG9r
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgMCk7Ci0gICAgICAgIHBva2UoVHJ1c3RlZElt
bVB0cihhcmd1bWVudCksIDEpOwotICAgICAgICBwb2tlKFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwg
Mik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0jZWxzZQotI2Vy
cm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKLSNlbmRpZgotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwg
c2NyYXRjaCk7Ci0gICAgICAgIGNhbGwoc2NyYXRjaCk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpyZWdUMCk7Ci0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBsb2Fk
NjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQotICAgICAgICAg
ICAgbG9hZDMyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwotI2VuZGlmCi0g
ICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5h
bWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZyk7CkBAIC0xMDUyLDcgKzk5
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9
CiAjZW5kaWYKIAotICAgIHZvaWQgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAg
dm9pZCBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oVk0mKTsKIAogICAgIHZvaWQgaW5jcmVt
ZW50U3VwZXJTYW1wbGVyQ291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudFN1cGVyU2FtcGxlckNv
dW50KCk7CkBAIC0xMTg5LDE0ICsxMTMxLDE0IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CisgICAgdm9pZCBjYWxsRXhjZXB0aW9u
RnV6eihWTSYpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhj
ZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKICAgICBlbnVtIEV4Y2VwdGlv
bkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCi0gICAgICAgIEV4Y2VwdGlvbkNo
ZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lkdGggPSBOb3Jt
YWxKdW1wV2lkdGgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdE5vblBhdGNoYWJs
ZUV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgSnVtcCBlbWl0SnVtcElmRXhjZXB0aW9uKCk7CisgICAg
ICAgIFZNJiwgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2Vw
dGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SnVtcCBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mKTsKKyAgICBKdW1wIGVtaXRK
dW1wSWZFeGNlcHRpb24oVk0mKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAg
ICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1w
bGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKQEAgLTEyNzksNyAr
MTIyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Q291bnQoY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVtaXRMb2FkU3RydWN0
dXJlKFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCk7CisgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lzdGVySUQgc291cmNlLCBS
ZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICAgICB2b2lkIGVtaXRTdG9y
ZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJ
RCBkZXN0LCBSZWdpc3RlcklEKQogICAgIHsKQEAgLTEzMTQsNDUgKzEyNTYsNDUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKGFkZHJlc3Mp
LCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBi
YXJyaWVyQnJhbmNoKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAgICBKdW1wIGJh
cnJpZXJCcmFuY2goVk0mIHZtLCBHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hHUFIpCiAgICAg
ewogICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BS
LCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkp
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBBYnNvbHV0ZUFk
ZHJlc3Modm0uaGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKICAgICB9CiAKLSAg
ICBKdW1wIGJhcnJpZXJCcmFuY2goSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAg
ICBKdW1wIGJhcnJpZXJCcmFuY2goVk0mIHZtLCBKU0NlbGwqIGNlbGwsIEdQUlJlZyBzY3JhdGNo
R1BSKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKICAgICAgICAgbG9h
ZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwg
c2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclRo
cmVzaG9sZCgpKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUiwg
QWJzb2x1dGVBZGRyZXNzKHZtLmhlYXAuYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpKSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgYmFycmllclN0b3JlTG9hZEZlbmNlKCkKKyAgICB2b2lkIGJh
cnJpZXJTdG9yZUxvYWRGZW5jZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBK
dW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIEp1bXAgb2sg
PSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0pOwogICAgICAgICBtZW1vcnlGZW5jZSgp
OwogICAgICAgICBvay5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG11dGF0b3JG
ZW5jZSgpCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYg
KGlzWDg2KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEp1bXAgb2sgPSBqdW1wSWZN
dXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JG
ZW5jZU5vdE5lZWRlZCh2bSk7CiAgICAgICAgIHN0b3JlRmVuY2UoKTsKICAgICAgICAgb2subGlu
ayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdG9yZUJ1dHRlcmZseShHUFJSZWcgYnV0
dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQorICAgIHZvaWQgc3RvcmVCdXR0ZXJmbHkoVk0mIHZtLCBH
UFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKGlzWDg2
KCkpIHsKICAgICAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhvYmplY3QsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVl
ZGVkKCk7CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0p
OwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRk
cmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICBzdG9y
ZUZlbmNlKCk7CkBAIC0xMzYyLDcgKzEzMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBudWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0
ZXJmbHkoR1BSUmVnIGJ1dHRlcmZseSwgR1BSUmVnIG9iamVjdCkKKyAgICB2b2lkIG51a2VTdHJ1
Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShWTSYgdm0sIEdQUlJlZyBidXR0ZXJmbHksIEdQUlJlZyBv
YmplY3QpCiAgICAgewogICAgICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICAgICAgb3IzMihU
cnVzdGVkSW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG51a2VkU3RydWN0dXJlSURCaXQoKSkp
LCBBZGRyZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkBAIC0xMzcw
LDcgKzEzMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsK
KyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCh2bSk7CiAgICAg
ICAgIG9yMzIoVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90PihudWtlZFN0cnVjdHVy
ZUlEQml0KCkpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkp
OwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRk
cmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTM4MSw5ICsx
MzIzLDkgQEAgcHVibGljOgogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogICAgIAot
ICAgIEp1bXAganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCkKKyAgICBKdW1wIGp1bXBJZk11
dGF0b3JGZW5jZU5vdE5lZWRlZChWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mTXV0YXRvclNo
b3VsZEJlRmVuY2VkKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFplcm8sIEFic29s
dXRlQWRkcmVzcyh2bS5oZWFwLmFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSk7CiAg
ICAgfQogICAgIAogICAgIC8vIEVtaXRzIHRoZSBicmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2Yu
IFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0IGZhbGwgdGhyb3VnaC4gVGhlCkBAIC0x
NDcxLDcgKzE0MTMsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQg
ZW1pdFJhbmRvbVRodW5rKEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgRlBSUmVnIHJlc3VsdCk7Ci0gICAgdm9pZCBlbWl0
UmFuZG9tVGh1bmsoR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3Jh
dGNoMiwgR1BSUmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KTsKKyAgICB2b2lkIGVtaXRSYW5k
b21UaHVuayhWTSYsIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYKIAogICAgIC8v
IENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGluIGFsbG9jYXRvckdQ
UiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCkBAIC0xNTUxLDEwICsxNDkzLDEwIEBA
IHB1YmxpYzoKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9j
YXRlSlNPYmplY3RXaXRoS25vd25TaXplKAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1
Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hH
UFIxLAorICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAg
ICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPigqdm0oKSktPmFsbG9jYXRvckZvcihzaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9y
KHNpemUpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTY0LDkgKzE1MDYsOSBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwg
dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+Ci0gICAgdm9pZCBl
bWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVj
dHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0
b3JhZ2VUeXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIy
LCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwg
c2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCwgQ2xhc3NUeXBlOjphbGxvY2F0aW9u
U2l6ZSgwKSk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxDbGFz
c1R5cGU+KHZtLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNj
cmF0Y2hHUFIyLCBzbG93UGF0aCwgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSk7CiAgICAg
fQogICAgIAogICAgIC8vIGFsbG9jYXRpb25TaXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55IG9m
IHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKQEAgLTE1
ODcsMjYgKzE1MjksMjYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0QWxs
b2NhdGVWYXJpYWJsZVNpemVkQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgU3Vi
c3BhY2UmIHN1YnNwYWNlID0gKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4oKnZtKCkpOworICAgICAg
ICBTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAgICAg
ICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQocmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxsb2Nh
dGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBl
bWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0
Y2hHUFIyKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVu
YW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNP
YmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBh
bGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRKU09i
amVjdChWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBH
UFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hH
UFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBlbWl0QWxsb2NhdGVWYXJp
YWJsZVNpemVkQ2VsbDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBhbGxvY2F0aW9u
U2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIGVtaXRB
bGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPENsYXNzVHlwZT4odm0sIHJlc3VsdEdQUiwgc3RydWN0
dXJlLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7
CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0R1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9CiAKLSAgICB2b2lkIGVtaXRDb252
ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZywgRlBS
UmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmpl
Y3QqLCBib29sIG5lZ2F0ZVJlc3VsdCA9IGZhbHNlKTsKKyAgICB2b2lkIGVtaXRDb252ZXJ0VmFs
dWVUb0Jvb2xlYW4oVk0mLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnLCBGUFJS
ZWcsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVj
dCosIGJvb2wgbmVnYXRlUmVzdWx0ID0gZmFsc2UpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENsYXNzVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdChH
UFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIx
LCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRB
bGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdChWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8
Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4odm0sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIs
IHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OjpjbGFz
c0luZm9PZmZzZXQoKSkpOwogICAgIH0KICAgICAKQEAgLTE2MzYsNyArMTU3OCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHdhbmdzSW50NjRIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVn
IHNjcmF0Y2gpOwogI2VuZGlmCiAKLSAgICB2b2lkIGxvYWRXYXNtQ29udGV4dChHUFJSZWcgZHN0
KQorICAgIHZvaWQgbG9hZFdhc21Db250ZXh0KFZNJiB2bSwgR1BSUmVnIGRzdCkKICAgICB7CiAj
aWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2Vt
Ymx5RmFzdFRMUygpKSB7CkBAIC0xNjQ1LDE3ICsxNTg3LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoaXMgc3RhdGUgZWxzZXdoZXJlIHRv
IGFsbG93IFBJQy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTc3
MwotICAgICAgICBsb2FkUHRyKCZtX3ZtLT53YXNtQ29udGV4dCwgZHN0KTsKKyAgICAgICAgbG9h
ZFB0cigmdm0ud2FzbUNvbnRleHQsIGRzdCk7CiAgICAgfQogCi0gICAgdm9pZCBzdG9yZVdhc21D
b250ZXh0KEdQUlJlZyBzcmMpCisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0KFZNJiB2bSwgR1BS
UmVnIHNyYykKICAgICB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKICAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpKQogICAgICAgICAgICAgcmV0dXJuIHN0b3Jl
VG9UTFNQdHIoc3JjLCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRFWFRfS0VZKSk7
CiAjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNld2hlcmUgdG8g
YWxsb3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5Nzcz
Ci0gICAgICAgIHN0b3JlUHRyKHNyYywgJm1fdm0tPndhc21Db250ZXh0KTsKKyAgICAgICAgc3Rv
cmVQdHIoc3JjLCAmdm0ud2FzbUNvbnRleHQpOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGxv
YWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQpAQCAtMTY3Nyw3ICsxNjE5
LDYgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFZNKiBtX3ZtOwogICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2Nr
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblRhaWxQCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKIH0KIAotdm9pZCBDQ2FsbEhl
bHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCit2b2lkIENDYWxsSGVscGVy
czo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIEFTU0VS
VCghUmVnaXN0ZXJTZXQ6OmFyZ3VtZW50R1BSUygpLmdldChzY3JhdGNoMU5vbkFyZ0dQUikpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpLT5zaGFkb3dDaGlja2VuKCkuYWRkcmVzc09mTG9n
Q3Vyc29yKCkpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZt
LnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSksIHNjcmF0Y2gxTm9uQXJnR1BS
KTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpLCBzaGFkb3dQYWNrZXQp
OwotICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoQmVsb3csIHNoYWRvd1BhY2tldCwgVHJ1c3RlZElt
bVB0cih2bSgpLT5zaGFkb3dDaGlja2VuKCkubG9nRW5kKCkpKTsKKyAgICBKdW1wIG9rID0gYnJh
bmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hpY2tl
bigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25Qcm9jZXNzU2hhZG93
Q2hpY2tlbkxvZykpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CiAgICAgY2FsbChzY3JhdGNoMU5vbkFy
Z0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCktPnNoYWRvd0NoaWNrZW4oKS5hZGRy
ZXNzT2ZMb2dDdXJzb3IoKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIodm0uc2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwgc2NyYXRjaDFO
b25BcmdHUFIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRv
d1BhY2tldCk7CiAgICAgb2subGluayh0aGlzKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihTaGFkb3dDaGlja2VuOjpQYWNrZXQpKSwgc2hhZG93UGFja2V0LCBzY3JhdGNoMik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDIx
NDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENDYWxs
SGVscGVycyA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGljOgotICAgIENDYWxsSGVs
cGVycyhWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKLSAgICAgICAgOiBBc3NlbWJs
eUhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICBDQ2FsbEhlbHBlcnMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwKQorICAgICAgICA6IEFzc2VtYmx5SGVscGVycyhjb2RlQmxvY2spCiAgICAgewog
ICAgIH0KICAgICAKQEAgLTI0NDAsMTEgKzI0NDAsMTEgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogICAgIAotICAgIHZvaWQganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpCisgICAgdm9pZCBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKFZNJiB2bSkKICAgICB7CiAgICAgICAgIC8vIGdlbmVyaWNVbndp
bmQoKSBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gsCiAgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFuZGxlciBpbiB2bS0+dGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cuCi0gICAgICAgIGxvYWRQdHIoJnZtKCktPnRhcmdldE1hY2hp
bmVQQ0ZvclRocm93LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGxvYWRQdHIoJnZtLnRhcmdl
dE1hY2hpbmVQQ0ZvclRocm93LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIGp1bXAoR1BSSW5m
bzo6cmVnVDEpOwogICAgIH0KIApAQCAtMjY0MCw3ICsyNjQwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOwogICAgIC8vIExlYXZlcyBiZWhp
bmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1Bh
Y2tldC4KLSAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjE0
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwog
ICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSgpKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1f
Ynl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZXR1cm5WYWx1ZUdQUikpOwpAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogCiAgICAgICAgIC8v
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1
bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApAQCAtODg1LDE0
ICs4ODUsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAg
ICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJG
cmFtZSkudmFsdWUoKSkpOwotICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAg
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0KIAogICAgIGlmICghbV9l
eGNlcHRpb25DaGVja3MuZW1wdHkoKSB8fCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSkg
ewogICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CiAKICAgICAgICAgLy8gbG9va3VwRXhj
ZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhl
YyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0oKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC05MDQsNyArOTA0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgMSk7CiAjZW5kaWYKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9v
a3VwRXhjZXB0aW9uSGFuZGxlcikudmFsdWUoKSkpOwotICAgICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMTIg
KzI5NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KCkKICAgICAgICAgewotICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRF
eGNlcHRpb25DaGVjaygpKTsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChl
bWl0RXhjZXB0aW9uQ2hlY2soKnZtKCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZXhj
ZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2Vw
dGlvbkNoZWNrKCkpOworICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjaygqdm0oKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZW5lcmF0ZU91dE9mTGluZShWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0ciBjYWxsUmVwbGFjZW1lbnQpCiAgICAg
ewogICAgICAgICBhdXRvIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKLSAg
ICAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgICAgICAgICAgYXV0byBqdW1wID0gaml0
Lmp1bXAoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJl
Y2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4K
ICAgICAgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7CkBAIC0xNTAs
NyArMTUwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFzdFBhdGhPblJl
cGF0Y2gpIHsKIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgICAgICAgICBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUgZ2VuZXJhdGlvblN0YXRlOwogICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmUgPSBnZW5lcmF0ZUlubGluZShqaXQsIGdlbmVyYXRpb25TdGF0ZSwgc2hv
dWxkRW1pdFByb2ZpbGluZyk7CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJlcGxhY2VDYWxsKCk7CiAKICAgICAgICAgewotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9j
ayk7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbmRKdW1wTGlzdDsg
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGhKdW1wTGlzdDsg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBKSVQ6OkNvZGVS
ZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMig4
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAKICAgICAvLyBB
bGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMs
IGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKQEAgLTE3NCw3
ICsxNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiAgICAg
aWYgKGFsbG9jYXRvcikKICAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0
b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRy
KDApLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KCp2
bSgpLCByZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNl
bGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKQEAgLTQ2Myw3
ICs0NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1CiAgICAg
R1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7CiAgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpOworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZtKCksIHZhbHVl
LCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CkBAIC00NzgsNyArNDc4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIEpTVmFs
dWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7Ci0gICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVh
bih2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgdmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKIH0KQEAgLTc2MCwxMCArNzYwLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiAKIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJlZ1QwID09
IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCk7CisgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcigqdm0oKSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1c2hfd2l0aF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtODIxLDcgKzgyMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19zdHJpbmcoSW5z
dHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCBy
ZWdUMyk7CiAgICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0
aGUgaGFuZGxlci4KQEAgLTgzMiw3ICs4MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJ
bnN0cnVjdGlvbiogY3VyCiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKICAg
ICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwpAQCAtOTc3LDcgKzk3Nyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBoYXNTZWVu
TXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
KyAgICBlbWl0QWxsb2NhdGVKU09iamVjdCgqdm0oKSwgcmVzdWx0UmVnLCBudWxscHRyLCBhbGxv
Y2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0KQEAgLTEzMTQs
NyArMTMxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm8KICAg
ICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVn
ID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgog
ICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QzKTsKQEAgLTEz
MjgsNyArMTMyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkK
ICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gx
UmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVy
LgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMik7CiAgICAgZW1pdExvYWRUYWcoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbgogCiAgICAgLy8gTG9h
ZCB0aGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QgaW4gcmVnVDIuICBJZiB0aGlzIGlzIGVxdWFs
IHRvIHJlZ1QxIC0gV0lOIQogICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYgd2UndmUgaGl0IG51
bGwgLSBpZiB3ZSBoYXZlIHRoZW4gZHJvcCBvdXQgb2YgdGhlIGxvb3AsIGlmIG5vdCBnbyBhZ2Fp
bi4KLSAgICBlbWl0TG9hZFN0cnVjdHVyZShyZWdUMiwgcmVnVDIsIHJlZ1QzKTsKKyAgICBlbWl0
TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDIsIHJlZ1QyLCByZWdUMyk7CiAgICAgbG9hZDY0KEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
SnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMiwgcmVnVDEpOwogICAgIGVt
aXRKdW1wSWZKU0NlbGwocmVnVDIpLmxpbmtUbyhsb29wLCB0aGlzKTsKQEAgLTIxMCw3ICsyMTAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3RpCiAgICAgSnVtcCBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDApOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJ
bnN0cnVjdGlvbiogY3UKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpT
VmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CkBAIC0zNjYsNyAr
MzY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIAogCiAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2Fk
U3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAo
YnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmpl
Y3RJc0ZvcmVpZ24gPSBqdW1wKCk7CkBAIC0zODksNyArMzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9udWxsKEluc3RydWN0aW9uKgogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdUMiwgcmVnVDEp
OworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwog
ICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZh
bHVlKTsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdzKHZhbHVlKSwg
cmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgZW1pdENvbnZl
cnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0
Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCkBAIC00NTEsMTAgKzQ1MSwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJVDo6ZW1pdF9vcF90
aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZWdU
MCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7Ci0gICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoSW5z
dHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Zt
KSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFu
ZE5vdGlmeVByb2ZpbGVyKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgaXNDYXRjaGFibGVF
eGNlcHRpb24ubGluayh0aGlzKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVn
VDMpOwpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoSW5zdHJ1
Y3Rpb24qIGMKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9h
ZFN0cnVjdHVyZShyZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSgq
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFy
ZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC02NzIsNyArNjcyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIAogICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdUMiwgcmVn
VDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKQEAgLTkxOCw3ICs5MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9o
aW50KEluc3RydWN0CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGNvcHlDYWxsZWVT
YXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2
bSgpKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVj
b2RlT2Zmc2V0KTsKICAgICAgICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0
cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJl
ZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KQEAgLTEzNzksNyArMTM3OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0UmVn
LCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gocmVnVDAsIHJlZ1QxKTsKKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2bSgpLCByZWdU
MCwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAK
QEAgLTEyNTUsNyArMTI1NSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAKLSAgICBKdW1w
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHJlZ1QxLCByZWdUMik7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCgqdm0o
KSwgcmVnVDEsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOwogCkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIp
CiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaChv
d25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2goKnZtKCksIG93bmVyLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgb3duZXIpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhl
bHBlcnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CiAgICAgcHVibGljOgogICAg
ICAgICBKU0ludGVyZmFjZUpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKLSAg
ICAgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCBjb2RlQmxvY2spCisgICAgICAgICAgICA6IEND
YWxsSGVscGVycyhjb2RlQmxvY2spCisgICAgICAgICAgICAsIG1fdm0odm0pCiAgICAgICAgIHsK
ICAgICAgICAgfQogCkBAIC03Nyw2ICs3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aW5saW5lIEFkZHJlc3MgaW50UGF5bG9hZEZvcihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgYmFzZSA9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaW5saW5lIEFkZHJlc3MgaW50VGFnRm9yKGlu
dCBpbmRleCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBp
bmxpbmUgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBpbmRleCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOworCisgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07
IH0KKworICAgICAgICBWTSogbV92bTsKICAgICB9OwogCiAgICAgc3RydWN0IFRodW5rSGVscGVy
cyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIx
NDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVHZXRCeUlECiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1
ZQogICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0
aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpKSkgewogCi0gICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFy
cmF5TGVuZ3RoKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkq
PihiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewogICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0
QXJyYXlMZW5ndGgoKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5
KSB7CiAKLSAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8s
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
aWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFt
ZSkpOwogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTMzMCw3ICszMzAsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgIExPR19J
QygoSUNFdmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRAogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZUZv
cihpZGVudC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVJlcGxhY2Uodm0sIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgICAgICAgICAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgp
KTsKIAotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAodm0sIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNv
ZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTk5NCw3ICs5OTQsNyBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiB2b2lkIHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQog
ewogICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihr
aW5kKSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCpjb2RlQmxvY2stPnZt
KCksIHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CisgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2
b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgfQogCiAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9j
YXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uKCkpOworICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5m
bywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0SW4o
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIx
NDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGxvYWRBcmd1bWVudFdpdGhTcGVjaWZpY0NsYXNzKGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGxvYWRDZWxsQXJndW1lbnQoYXJndW1lbnQsIGRzdCk7
Ci0gICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZShkc3QsIHNjcmF0Y2gsIGRzdCk7CisgICAg
ICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgZHN0LCBzY3JhdGNoLCBkc3QpOwogICAg
ICAgICAgICAgYXBwZW5kRmFpbHVyZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRj
aCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZv
KSkpOwogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZWxvYWQgdGhlIGFyZ3VtZW50IHNpbmNl
IGVtaXRMb2FkU3RydWN0dXJlIGNsb2JiZXJlZCBpdC4KICAgICAgICAgICAgIGxvYWRDZWxsQXJn
dW1lbnQoYXJndW1lbnQsIGRzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE5
ICs2NCwxOSBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAvLyBs
aW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZXMgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlu
c3RlYWQuCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIC8vIFRoZSBjYWxsIHB1c2hlZCBhIHJldHVybiBh
ZGRyZXNzLCBzbyB3ZSBuZWVkIHRvIHBvcCBpdCBiYWNrIG9mZiB0byByZS1hbGlnbiB0aGUgc3Rh
Y2ssCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGppdC5wcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgIGpp
dC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5r
IikpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRo
dW5rR2VuZXIKICAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxhenkgY29tcGlsYXRpb24g
aWYgbmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNhbGxlZQogICAgIC8vIHRvIGJlIGluIHJlZ1Qw
L3JlZ1QxIChwYXlsb2FkL3RhZyksIHRoZSBDYWxsRnJhbWUgdG8gaGF2ZSBhbHJlYWR5CiAgICAg
Ly8gYmVlbiBhZGp1c3RlZCwgYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxhYmxl
IGZvciB1c2UuCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICAKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAg
ICAgCkBAIC0xNTEsNyArMTUxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1
bmtHZW5lcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3Nl
IGJpZyB0aW1lIGFueXdheS4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIENDYWxsSGVscGVycyBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3Bl
cmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCk7CiAgICAgCkBAIC0xNzAsNyArMTcwLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIC8vIGp1bXAgdG8gdGhl
IGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hp
bGUgd2UKICAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJpYXRl
IEpJVCBvcGVyYXRpb24uCiAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CiAg
ICAgCkBAIC0zNTksNyArMzU5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZQogICAgIC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAgICBleGNlcHRpb25IYW5kbGVy
LmxpbmsoJmppdCk7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJmYWNlSklUOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikgJiYg
VVNFKEpTVkFMVUUzMl82NCkKQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1
c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigp
OworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIm5hdGl2ZSAlcyVzIHRyYW1wb2xpbmUiLCBlbnRyeVR5
cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAi
IDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRo
b3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKSk7CkBAIC0xMDM0
LDcgKzEwMzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmFuZG9tVGh1bmtHZW5lcmF0CiAg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgaml0LmVtaXRSYW5kb21UaHVuayhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7
CisgICAgaml0LmVtaXRSYW5kb21UaHVuaygqdm0sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
KTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwog
CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxs
KHZtKSwgInJhbmRvbSIpOwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHJhbmRvbVRodW5rR2VuZXJhdAogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlz
Tm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwogICAgIApAQCAtMTEzNywxOSArMTEzNywxOSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlv
blR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGFuZCBqdW1wIGhlcmUuCiAgICAgLy8gV2UncmUg
YWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZSwgYnV0IG5vdCBjYWxsZWUgc2F2ZXMu
CiAgICAgewogICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwogICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChH
UFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtLCB1c2VkUmVn
aXN0ZXJzKTsKICAgICB9CiAKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC5jYWxsKCk7Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgdm9pZCAoKnRocm93V2FzbUV4Y2Vw
dGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhlY1N0YXRlKiBl
eGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpIHsKICAgICAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwxNSArMjk1LDQgQEAgSlNWYWx1ZSBKU0NlbGw6Omdl
dFByb3RvdHlwZShKU09iamVjdCosIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWJvb2wgSlNDZWxsOjppc0FueVdhc21DYWxsZWUoVk0mIHZtKSBjb25zdAotewotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICByZXR1cm4gaW5oZXJpdHModm0sIEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmluZm8oKSkgfHwgaW5oZXJpdHModm0sIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTo6
aW5mbygpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw2
IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc1N5bWJv
bCgpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKLSAgICBib29sIGlzQW55V2Fz
bUNhbGxlZShWTSYpIGNvbnN0OwogICAgIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBjb25zdDsKICAg
ICBib29sIGlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc1Byb3h5KCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2LDEyIEBAIGlu
bGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW4KIAogQUxXQVlTX0lOTElORSBW
TSYgRXhlY1N0YXRlOjp2bSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxlZSgpKTsKLSAgICBB
U1NFUlQoY2FsbGVlKCktPnZtKCkpOwotICAgIEFTU0VSVCghY2FsbGVlKCktPmlzTGFyZ2VBbGxv
Y2F0aW9uKCkpOworICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7
CisgICAgQVNTRVJUKGNhbGxlZSk7CisgICAgQVNTRVJUKGNhbGxlZS0+dm0oKSk7CisgICAgQVNT
RVJUKCFjYWxsZWUtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwogICAgIC8vIFRoaXMgaXMgYW4gaW1w
b3J0YW50IG9wdGltaXphdGlvbiBzaW5jZSB3ZSBhY2Nlc3MgdGhpcyBzbyBvZnRlbi4KLSAgICBy
ZXR1cm4gKmNhbGxlZSgpLT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuICpjYWxsZWUt
Pm1hcmtlZEJsb2NrKCkudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTQ0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2NCw3ICsxNjQsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICB2KGJvb2wsIHZlcmJvc2VDb21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgdmVyYm9zZUZUTENvbXBpbGF0aW9uLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCBsb2dDb21waWxhdGlvbkNoYW5nZXMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVyYm9zZVZhbGlkYXRpb25GYWlsdXJl
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDkgKzQyLDEwIEBAIGludHB0cl90IFN0YWNrRnJhbWU6OnNvdXJjZUlEKCkgY29uc3QKIAogU3Ry
aW5nIFN0YWNrRnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiB7CisgICAgaWYgKG1faXNXYXNtRnJh
bWUpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CisKICAgICBp
ZiAoIW1fY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChtX2NhbGxlZSAmJiBtX2NhbGxlZS0+aXNB
bnlXYXNtQ2FsbGVlKCptX2NhbGxlZS0+dm0oKSkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJbd2FzbSBjb2RlXSIpOwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJbbmF0
aXZlIGNvZGVdIik7CiAgICAgfQogCkBAIC01Niw2ICs1Nyw5IEBAIFN0cmluZyBTdGFja0ZyYW1l
Ojpzb3VyY2VVUkwoKSBjb25zdAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZN
JiB2bSkgY29uc3QKIHsKKyAgICBpZiAobV9pc1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiPHdhc20+Iik7CisKICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAg
c3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgICAgICBjYXNlIEV2YWxDb2Rl
OgpAQCAtNzAsMTIgKzc0LDExIEBAIFN0cmluZyBTdGFja0ZyYW1lOjpmdW5jdGlvbk5hbWUoVk0m
IHZtKSAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAg
fQorCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKG1fY2FsbGVlKSB7CiAgICAgICAgIGlmICht
X2NhbGxlZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgIG5hbWUgPSBnZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWUodm0sIGpzQ2FzdDxKU09iamVjdCo+KG1fY2FsbGVlLmdldCgpKSkuaW1wbCgpOwot
ICAgICAgICBlbHNlIGlmIChtX2NhbGxlZS0+aXNBbnlXYXNtQ2FsbGVlKCptX2NhbGxlZS0+dm0o
KSkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCI8d2FzbT4iKTsKICAgICB9CiAg
ICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogbmFtZTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDIx
NDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBKU09iamVjdDsKIAogY2xhc3MgU3Rh
Y2tGcmFtZSB7CiBwdWJsaWM6CisgICAgU3RhY2tGcmFtZSgpID0gZGVmYXVsdDsKKwogICAgIFN0
YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIGNhbGxlZSkKICAgICAgICAgOiBtX2NhbGxlZSh2bSwg
Y2FsbGVlKQogICAgIHsgfQpAQCAtNDUsNiArNDcsMTMgQEAgcHVibGljOgogICAgICAgICAsIG1f
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAgeyB9CiAKKyAgICBzdGF0aWMgU3Rh
Y2tGcmFtZSB3YXNtKCkKKyAgICB7CisgICAgICAgIFN0YWNrRnJhbWUgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9pc1dhc21GcmFtZSA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCiAgICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0IHsgcmV0dXJuICEh
bV9jb2RlQmxvY2s7IH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2ln
bmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKQEAgLTY1LDcgKzc0LDcgQEAgcHJp
dmF0ZToKICAgICBTdHJvbmc8SlNDZWxsPiBtX2NhbGxlZSB7IH07CiAgICAgU3Ryb25nPENvZGVC
bG9jaz4gbV9jb2RlQmxvY2sgeyB9OwogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQgeyBV
SU5UX01BWCB9OwotICAgIAorICAgIGJvb2wgbV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIs
IEJhZzxDYWxsTGlua0luZm8+JiYgY2FsbExpbmtJbmZvcywgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+JiYgZXhpdFN0dWJzLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGNhbGxl
ZUNvdW50KQogICAgIHsKLSAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUo
Y2FsbGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIHN0ZDo6Zm9y
d2FyZDxCYWc8Q2FsbExpbmtJbmZvPj4oY2FsbExpbmtJbmZvcyksIHN0ZDo6Zm9yd2FyZDxWZWN0
b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4+KGV4aXRTdHVicyksIG1vZGUsIGNhbGxlZUNvdW50KTsK
KyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93
bmVyLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxMaW5rSW5mb3MpLCBzdGQ6
OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0U3R1YnMpLCBtb2RlLCBj
YWxsZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTYxLDM3ICs2MSwzMiBAQCBwdWJsaWM6CiAgICAg
SlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7IH0KICAgICBib29sIGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKTsKIAotICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIFJlZlB0cjxXZWJBc3NlbWJs
eUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5j
dGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5zaWdu
ZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50
KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7
Ci0gICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICBy
ZXR1cm4gbV9jYWxsZWVzW2NhbGxlZUluZGV4XTsKICAgICB9CiAKLSAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIFJlZlB0cjxXZWJBc3NlbWJseUNhbGxlZT4gd2Fz
bUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAg
cmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOworICAg
ICAgICByZXR1cm4gbV9jYWxsZWVzW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF07CiAgICAg
fQogCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAgIHZvaWQgc2V0SlNFbnRy
eXBvaW50Q2FsbGVlKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2ViQXNzZW1ibHlDYWxs
ZWU+JiYgY2FsbGVlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXgg
PCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0s
IHRoaXMsIGNhbGxlZSk7CisgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3Zl
KGNhbGxlZSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYg
dm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCisg
ICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVm
PFdlYkFzc2VtYmx5Q2FsbGVlPiYmIGNhbGxlZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNhbGxlZXMoKVtjYWxs
ZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKLSAgICB9Ci0K
LSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNh
bGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOwor
ICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XSA9IFdURk1vdmUo
Y2FsbGVlKTsKICAgICB9CiAKICAgICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVu
c2lnbmVkIGltcG9ydEluZGV4KQpAQCAtMTAxLDIyICs5NiwxMyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorCiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYsIEpTV2ViQXNzZW1i
bHlNb2R1bGUqLCBCYWc8Q2FsbExpbmtJbmZvPiYmLCBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVi
cz4mJiwgV2FzbTo6TWVtb3J5TW9kZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpOwogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mQ2FsbGVlcygpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihz
aXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNhbGxlZT4pICogbnVtQ2FsbGVlcyAqIDI7Ci0gICAgfQotCiAgICAgY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewogICAg
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgfTsKQEAg
LTEyNSw2ICsxMTEsNyBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91
bmNvbmRpdGlvbmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJ
bmZvczsKICAgICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOwor
ICAgIFZlY3RvcjxSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+PiBtX2NhbGxlZXM7CiAgICAgV2Fz
bTo6TWVtb3J5TW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwzMCArMjMxLDMwIEBAIHBy
aXZhdGU6CiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZTsgLy8gRklYTUU6IG1ha2UgdGhpcyBs
YXp5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk3OTIKIH07CiAK
LXN0YXRpYyBWYWx1ZSogbG9hZFdhc21Db250ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9j
ayogYmxvY2spCitzdGF0aWMgVmFsdWUqIGxvYWRXYXNtQ29udGV4dChWTSogdm0sIFByb2NlZHVy
ZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIHBvaW50ZXJU
eXBlKCksIE9yaWdpbigpKTsKICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCi0gICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCBD
Q2FsbEhlbHBlcnM6OmxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7
Ci0gICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIoKSk7CisgICAg
ICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KHZtLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAg
ICB9KTsKIAogICAgIHJldHVybiBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJZGVudGl0
eSwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogfQogCi1zdGF0aWMgdm9pZCBzdG9yZVdhc21Db250
ZXh0KFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBhcmcpCitzdGF0
aWMgdm9pZCBzdG9yZVdhc21Db250ZXh0KFZNKiB2bSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jaywgVmFsdWUqIGFyZykKIHsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBibG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIE9y
aWdpbigpKTsKICAgICBpZiAoQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpKQogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNo
KGppdCwgQ0NhbGxIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KHBhcmFtc1swXS5ncHIo
KSk7CisgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dCgqdm0sIHBhcmFtc1swXS5ncHIo
KSk7CiAgICAgICAgIH0pOwogfQogCkBAIC0yOTksNyArMjk5LDcgQEAgQjNJUkdlbmVyYXRvcjo6
QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbgogCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
c2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9u
LCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKLSAgICBtX2luc3RhbmNlVmFs
dWUgPSBsb2FkV2FzbUNvbnRleHQobV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CisgICAgbV9pbnN0
YW5jZVZhbHVlID0gbG9hZFdhc21Db250ZXh0KCZtX3ZtLCBtX3Byb2MsIG1fY3VycmVudEJsb2Nr
KTsKIH0KIAogc3RydWN0IE1lbW9yeUJhc2VBbmRTaXplIHsKQEAgLTMyMCw5ICszMjAsOSBAQCBz
dGF0aWMgTWVtb3J5QmFzZUFuZFNpemUgZ2V0TWVtb3J5QmFzZUFuCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUoY29uc3Qg
TWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHBy
b2MsIEJhc2ljQmxvY2sqIGJsb2NrKQorc3RhdGljIHZvaWQgcmVzdG9yZVdlYkFzc2VtYmx5R2xv
YmFsU3RhdGUoVk0mIHZtLCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBWYWx1ZSog
aW5zdGFuY2UsIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2spCiB7Ci0gICAgc3Rv
cmVXYXNtQ29udGV4dChwcm9jLCBibG9jaywgaW5zdGFuY2UpOworICAgIHN0b3JlV2FzbUNvbnRl
eHQoJnZtLCBwcm9jLCBibG9jaywgaW5zdGFuY2UpOwogCiAgICAgaWYgKCEhbWVtb3J5KSB7CiAg
ICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVncyA9ICZQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkR3Jvd01lbW9yeShFeHByZXMKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdyb3dN
ZW1vcnkpKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpLCBkZWx0YSk7CiAKLSAgICByZXN0b3Jl
V2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1f
cHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRl
KG1fdm0sIG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRC
bG9jayk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtOTI5LDcgKzkyOSw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICAgICAgfQogCiAgICAgICAgIC8v
IFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNl
LCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCi0gICAgICAgIHJlc3Rv
cmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwg
bV9wcm9jLCBjb250aW51YXRpb24pOworICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZShtX3ZtLCBtX2luZm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgY29udGlu
dWF0aW9uKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgT3JpZ2luKCksIGFyZ3Ms
IHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKQEAgLTEwMjMsNyArMTAyMyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgfSk7CiAKICAgICAvLyBUaGUgY2FsbCBjb3Vs
ZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291
bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgotICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2Jh
bFN0YXRlKG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRC
bG9jayk7CisgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV92bSwgbV9pbmZvLm1l
bW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1
bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgV2FzbUludGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCitzdGF0aWMgdm9pZCBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29u
dGV4dCwgV2FzbUludGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIApAQCAtMTE5
Myw3ICsxMTkzLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbAog
CiAgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBw
aW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0
KGJhc2VNZW1vcnkpOworICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0KHZtLCBiYXNlTWVtb3J5
KTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnks
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwog
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsK
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKQEAgLTEyNTUsNyArMTI1NSw3
IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW4KICAgICAgICAgcmVz
dWx0LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9CiAKLSAgICBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoY29t
cGlsYXRpb25Db250ZXh0LCAqcmVzdWx0LCBzaWduYXR1cmUsIGluZm8pOworICAgIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcih2bSwgY29tcGlsYXRpb25Db250ZXh0LCAqcmVzdWx0LCBzaWduYXR1cmUs
IGluZm8pOwogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pz
KFZNCiAgICAgY29uc3QgSlNDQ2FsbGluZ0NvbnZlbnRpb24mIGpzQ0MgPSBqc2NDYWxsaW5nQ29u
dmVudGlvbigpOwogICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldCh2bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgIHVuc2lnbmVkIGFyZ0NvdW50
ID0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7Ci0gICAgSklUIGppdCh2bSwgbnVsbHB0cik7
CisgICAgSklUIGppdChudWxscHRyKTsKIAogICAgIC8vIEJlbG93LCB3ZSBhc3N1bWUgdGhhdCB0
aGUgSlMgY2FsbGluZyBjb252ZW50aW9uIGlzIGFsd2F5cyBvbiB0aGUgc3RhY2suCiAgICAgQVNT
RVJUKCFqc0NDLm1fZ3ByQXJncy5zaXplKCkpOwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
aGFzQmFkSTY0VXNlKSB7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKTsKICAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwog
ICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKICAgICAgICAgICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhj
ZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAg
ICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAogICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0zMzUsNyArMzM1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwogICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICBleGNlcHRp
b25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkpOworICAgICAgICBleGNl
cHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAg
ICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKICAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgd2FzbVRvSnMoVk0KICAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhjZXB0aW9u
Q2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBk
b3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKICAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwpAQCAtMzg4LDcgKzM4OCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgd2FzbVRvSnMoVk0KIAogICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKICAg
ICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwogICAgICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcigpOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgd2FzbVRvV2FzbSgKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7
CiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rp
b246Om9mZnNldE9mSW5zdGFuY2UoKSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAg
aml0LnN0b3JlV2FzbUNvbnRleHQoYmFzZU1lbW9yeSk7CisgICAgaml0LnN0b3JlV2FzbUNvbnRl
eHQoKnZtLCBiYXNlTWVtb3J5KTsKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBh
c3N1bWVzIHRoYXQgYWxsIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVk
IHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1
MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxs
IGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkocmV2aXNpb24g
MjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBz
aWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcgogc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2ln
U2VndkhhbmRsZXI7CiBzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07
CiBzdGF0aWMgU3RhdGljTG9jayBjb2RlTG9jYXRpb25zTG9jazsKLXN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVMb2Nh
dGlvbnM7IC8vICh2bSwgc3RhcnQsIGVuZCkKK3N0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAodm0sIHN0
YXJ0LCBlbmQpCiAKIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWwsIHNpZ2luZm9f
dCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiB7CkBAIC04MSwxMiArODEsMTMgQEAgc3RhdGlj
IHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaQogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVz
cyIpOwogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwog
ICAgICAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0aW9ucy5nZXQoKSkgewotICAg
ICAgICAgICAgICAgIFZNKiB2bTsKICAgICAgICAgICAgICAgICB2b2lkKiBzdGFydDsKICAgICAg
ICAgICAgICAgICB2b2lkKiBlbmQ7Ci0gICAgICAgICAgICAgICAgc3RkOjp0aWUodm0sIHN0YXJ0
LCBlbmQpID0gcmFuZ2U7CisgICAgICAgICAgICAgICAgc3RkOjp0aWUoc3RhcnQsIGVuZCkgPSBy
YW5nZTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZnVuY3Rpb24gc3Rh
cnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihlbmQpKTsKICAg
ICAgICAgICAgICAgICBpZiAoc3RhcnQgPD0gZmF1bHRpbmdJbnN0cnVjdGlvbiAmJiBmYXVsdGlu
Z0luc3RydWN0aW9uIDwgZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOgorICAg
ICAgICAgICAgICAgICAgICBWTSogdm0gPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgbWF0Y2giKTsKICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSB2bS0+aml0U3R1YnMtPmV4aXN0
aW5nQ1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIGRvbid0IGhhdmUgYSBz
dHViIHRoZW4gd2Ugc2hvdWxkIGp1c3QgdHJlYXQgdGhpcyBsaWtlIGEgcmVndWxhciBjcmFzaC4K
QEAgLTEwOCwyMCArMTA5LDIwIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWws
IHNpZ2kKICAgICAgICAgc2lnYWN0aW9uKHNpZ25hbCwgJm9sZFNpZ1NlZ3ZIYW5kbGVyLCBudWxs
cHRyKTsKIH0KIAotdm9pZCByZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCog
ZW5kKQordm9pZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKIHsKICAgICBp
ZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7Ci0gICAgY29kZUxvY2F0aW9ucy0+YWRkKHN0ZDo6
bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKKyAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3Rk
OjptYWtlX3R1cGxlKHN0YXJ0LCBlbmQpKTsKIH0KIAotdm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYg
dm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2b2lkIHVucmVnaXN0ZXJDb2RlKHZvaWQqIHN0
YXJ0LCB2b2lkKiBlbmQpCiB7CiAgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwotICAg
IGNvZGVMb2NhdGlvbnMtPnJlbW92ZShzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7
CisgICAgY29kZUxvY2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZShzdGFydCwgZW5kKSk7
CiB9CiAKIGJvb2wgZmFzdE1lbW9yeUVuYWJsZWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAkocmV2aXNpb24gMjE0
NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBAIGNsYXNzIFZNOwogCiBuYW1lc3Bh
Y2UgV2FzbSB7CiAKLXZvaWQgcmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVu
ZCk7Ci12b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7Cit2
b2lkIHJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgdW5yZWdpc3Rl
ckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVuZCk7CiAKIGJvb2wgZmFzdE1lbW9yeUVuYWJsZWQo
KTsKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTcsMTkgKzI1NywxOSBAQCB2b2lkIFBsYW46OnJ1bihzdGQ6Om9wdGlvbmFsPE1lbW9yeU1v
ZGU+CiAgICAgbV9mYWlsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5z
aWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+IGNhbGxi
YWNrKQordm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIFJlZjxXZWJBc3NlbWJseUNhbGxl
ZT4mJiwgUmVmPFdlYkFzc2VtYmx5Q2FsbGVlPiYmKT4gY2FsbGJhY2spCiB7CiAgICAgQVNTRVJU
KCFmYWlsZWQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAw
OyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7
ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7CiAgICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRl
eF0uZ2V0KCk7CiAKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2Fs
bGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgV1RG
TW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAgICAgIFJlZjxXZWJBc3Nl
bWJseUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2Nh
dGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsKIAotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9i
YWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7CisgICAg
ICAgIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXZWJBc3Nl
bWJseUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOwogCi0gICAgICAgIGNhbGxiYWNr
KGludGVybmFsRnVuY3Rpb25JbmRleCwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2lu
dENhbGxlZSk7CisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92
ZShqc0VudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENh
bGxMaW5rSW5mbzsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgSlNXZWJBc3NlbWJseUNh
bGxlZTsKK2NsYXNzIFdlYkFzc2VtYmx5Q2FsbGVlOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKQEAg
LTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4o
c3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPiA9IHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjpm
dW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgSlNXZWJBc3NlbWJs
eUNhbGxlZSopPik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVl
cyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgUmVmPFdlYkFz
c2VtYmx5Q2FsbGVlPiYmLCBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYpPik7CiAKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQog
ICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCShy
ZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjUgKzMzLDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNhbGxlZTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07Ci0KLUpTV2ViQXNzZW1ibHlDYWxsZWU6OkpTV2Vi
QXNzZW1ibHlDYWxsZWUoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDYWxs
ZWVTdHJ1Y3R1cmUuZ2V0KCkpCi17IH0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUo
ZW50cnlwb2ludCk7Ci0gICAgV2FzbTo6cmVnaXN0ZXJDb2RlKHZtLCBtX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwor
V2ViQXNzZW1ibHlDYWxsZWU6OldlYkFzc2VtYmx5Q2FsbGVlKFZNJiB2bSkKKyAgICA6IG1fZW50
cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQoreyAKKyAgICBXYXNtOjpyZWdpc3RlckNvZGUo
bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK1dlYkFzc2VtYmx5Q2FsbGVlOjp+V2ViQXNzZW1ibHlDYWxsZWUoKQogewot
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5yZWdpc3RlckNvZGUoKmNlbGwtPnZt
KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci0gICAgdGhpc09iamVj
dC0+SlNXZWJBc3NlbWJseUNhbGxlZTo6fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKKyAgICBXYXNt
Ojp1bnJlZ2lzdGVyQ29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzcgKzMx
LDI4IEBACiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBK
U1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBXZWJBc3NlbWJseUNh
bGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJBc3NlbWJseUNhbGxlZT4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50KQorICAgIHN0YXRpYyBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYgY3JlYXRlKFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogY2FsbGVlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNhbGxl
ZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlDYWxsZWUodm0pOwotICAgICAgICBjYWxsZWUtPmZp
bmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKTsKLSAgICAgICAgcmV0dXJuIGNh
bGxlZTsKKyAgICAgICAgV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyBXZWJBc3NlbWJs
eUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKTsKKyAgICAgICAgUmVmPFdlYkFzc2VtYmx5Q2Fs
bGVlPiByZXN1bHQgPSBhZG9wdFJlZigqY2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkg
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLQotICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLQogICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9Ci0KICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQogCi1wcml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0m
KTsKK3Byb3RlY3RlZDoKKyAgICBXZWJBc3NlbWJseUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYp
OworICAgIH5XZWJBc3NlbWJseUNhbGxlZSgpOwogCiAgICAgV2FzbTo6RW50cnlwb2ludCBtX2Vu
dHJ5cG9pbnQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OkpTV2ViQXNzZW1ibHlDb2QKICAgICAsIG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCiB7CiAg
ICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7Ci0gICAgbWVtc2V0KGNhbGxlZXMoKSwg
MCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4pICogMik7CisgICAgbV9jYWxsZWVzLnJlc2l6ZVRvRml0KG1fY2FsbGVlQ291bnQgKiAyKTsK
IH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
QEAgLTc4LDggKzc4LDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxk
cgogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQgKiAyOyBpKyspCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXSk7CiAKICAgICB2aXNpdG9yLmFk
ZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFs
aXplcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDkgKzU4LDkgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogSlNXZWJBc3NlbWJs
eU1vZAogICAgIGF1dG8qIGNvZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0
ZSh2bSwgdGhpcywgcGxhbi50YWtlQ2FsbExpbmtJbmZvcygpLCBwbGFuLnRha2VXYXNtRXhpdFN0
dWJzKCksIHBsYW4ubW9kZSgpLCBjYWxsZWVDb3VudCk7CiAKICAgICBwbGFuLmluaXRpYWxpemVD
YWxsZWVzKGV4ZWMtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLAotICAgICAgICBbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2stPnNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpz
RW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2stPnNldFdhc21FbnRyeXBv
aW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAg
ICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYganNF
bnRyeXBvaW50Q2FsbGVlLCBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKGNh
bGxlZUluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5zZXRXYXNtRW50cnlwb2ludENhbGxlZShjYWxsZWVJbmRleCwgV1RGTW92ZSh3YXNt
RW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICB9KTsKICAgICByZXR1cm4gY29kZUJsb2NrOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsNyArMTE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAog
CiAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlv
biBhcyB0aGUgY2FsbGVlIHRvIGJlZ2luIHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgogICAg
IC8vIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1h
eSBzdGFjayBvdmVyZmxvdywgYW5kIHRoZSBzdGFjayBvdmVyZmxvdwotICAgIC8vIGhhbmRsZXIg
bWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFz
c2VtYmx5Q2FsbGVlIGRvZXNuJ3QgaGF2ZSBhCisgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRo
ZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIFdlYkFzc2VtYmx5Q2FsbGVlIGRv
ZXNuJ3QgaGF2ZSBhCiAgICAgLy8gZ2xvYmFsIG9iamVjdCwgYnV0IHRoZSBXZWJBc3NlbWJseUZ1
bmN0aW9uIGRvZXMuCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1lbnQsIGFy
Z0NvdW50LCByZW1haW5pbmdBcmdzKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7
CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRy
eXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5
RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+
IGpzRW50cnlwb2ludCwgV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUp
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1
bmN0aW9uU3RydWN0dXJlKCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgU3RydWN0dXJlKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGVTdAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5RnVuY3Rpb25UeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb246Oldl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQs
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlv
bjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3dhc21FbnRyeVBvaW50Q29kZSh3YXNt
RW50cnlwb2ludC0+ZW50cnlwb2ludCgpKQogICAgICwgbV9zaWduYXR1cmVJbmRleChzaWduYXR1
cmVJbmRleCkKQEAgLTE3NCwxOCArMTc0LDE2IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzRW50cnlwb2ludCk7Ci0gICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV93YXNtRW50cnlwb2ludCk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkKK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7CiAgICAgQVNT
RVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7Ci0gICAgbV9qc0VudHJ5cG9pbnQu
c2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOwotICAgIG1fd2FzbUVudHJ5cG9pbnQuc2V0KHZt
LCB0aGlzLCB3YXNtRW50cnlwb2ludCk7CisgICAgbV9qc0VudHJ5cG9pbnQgPSBqc0VudHJ5cG9p
bnQ7CisgICAgbV93YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OwogICAgIEFTU0VSVCht
X3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkgPT0gbV93YXNtRW50cnlQb2ludENvZGUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSos
IFdlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
RW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZS5nZXQoKTsgfQpAQCAtNjMsMTUgKzYzLDIwIEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCBXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnQpOwogCiBwcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpT
aWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRl
eCk7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNl
OwogICAgIHZvaWQqIG1fd2FzbUVudHJ5UG9pbnRDb2RlOyAvLyBDYWNoZSBjb2RlIHBvaW50ZXI6
IGFsbG93cyB0aGUgd2FzbSAtPiB3YXNtIHN0dWIgdG8gZG8gYSBzaW5nbGUgbG9hZCBhbmQganVt
cCBpbnN0ZWFkIG9mIGhhdmluZyBkZXBlbmRlbnQgbG9hZHMuCi0gICAgV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OwotICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OworCisgICAgLy8gV2UgaG9sZCByYXcg
cG9pbnRlcnMgdG8gdGhlc2UgZW50cnkgcG9pbnRzLCBldmVuIHRob3VnaCB0aGV5J3JlIHJlZiBj
b3VudGVkLiBUaGF0J3MKKyAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGJlIGEgZGVzdHJ1Y3Rp
YmxlIGNlbGwuIFRoZXNlIHBvaW50ZXJzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFsaXZlCisgICAg
Ly8gYmVjYXVzZSB3ZSBwb2ludCB0byB0aGUgaW5zdGFuY2UsIHdoaWNoIG93bnMgdGhlIENvZGVC
bG9jaywgd2hpY2ggb3ducyB0aGVzZSBwb2ludGVycy4KKyAgICBXZWJBc3NlbWJseUNhbGxlZSog
bV9qc0VudHJ5cG9pbnQ7CisgICAgV2ViQXNzZW1ibHlDYWxsZWUqIG1fd2FzbUVudHJ5cG9pbnQ7
CisKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsOCArMTI0LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjUwogICAgICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBG
dW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAgICAgICAgICAgICAgIC8v
ICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KICAgICAgICAgICAgICAgICAvLyAgICAgYy4g
UmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAg
ICAgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRl
eCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVlPiB3YXNtRW50cnlw
b2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2
bSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNl
LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRl
eCk7CkBAIC0xOTUsOCArMTk1LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjUwogICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+
aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpLT5nZXQoKTsKICAgICAgICAg
ICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAg
ICAgICAgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBj
b2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVl
PiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAic3Rh
cnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwg
c2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhp
cywgZnVuY3Rpb24pOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305555</attachid>
            <date>2017-03-27 20:31:44 -0700</date>
            <delta_ts>2017-04-03 15:27:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>186924</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGlm
IChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAgICAgICAgICAvLyBJ
ZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBhbnkgZnJhbWUgeWV0LCB3
ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJhbWUsIGJlY2F1c2Ugc29t
ZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAgICAgICAgICAgSlND
ZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAgICAgICAgICAgIGlmICghY2FsbGVl
ICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5pc0NlbGwoKSkgewor
ICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxs
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYgdmlzaXRvci0+aW5kZXgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1fYnVpbGRlcjsKICAg
ICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBAIC0yODEsNyArMjgzLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxpbmVOdW1iZXIpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgICAgIGlm
ICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZy
YW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgxLDYgKzE0ODEsNyBAQAog
CQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVF
IC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVENzk5NjAwQjc1OTFE
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3OTk2MDBCNzU5MUQg
LyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFFODlDQ0Q2MDA1REYy
NEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTZGQjQzQTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBK
U1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC00MDEzLDYgKzQwMTQsNyBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAv
KiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY1QzIxNTFFNUQ3OTk2MDBCNzU5
MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmcu
aDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTZEQUEyQTFFODlDQ0Q2MDA1REYyNEEgLyog
Q2FsbGVlQml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsZWVCaXRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1
RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUhlbHBl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzAyLDYgKzU3MDQsNyBAQAogCQkJCTBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAvKiBB
YnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJh
Y3RQQy5oICovLAogCQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBDYWNoZWRDYWxsLmgg
Ki8sCisJCQkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAqLywKIAkJ
CQkxNDI5RDhEQjBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCAqLywKIAkJCQkxNDI5
RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJQTdGODY5RUMwRjk1
QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAqLywKQEAgLTg4MTEsNiArODgxNCw3
IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJQ0ZvcndhcmRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElD
SW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJC
Q0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTZEQUEyQjFFODlD
Q0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5OUIyNDkx
QzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
Y3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
aWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBDb21waWxhdGlvbiBjb21w
aWxlKFZNJiB2bSwgUHJvY2VkdXJlJiBwCiAgICAgCiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24o
cHJvYywgb3B0TGV2ZWwpOwogICAgIAotICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxwdHIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTM0LDcgKzEzMTM0LDcgQEAgdm9p
ZCB0ZXN0RW50cnlTd2l0Y2hTaW1wbGUoKQogICAgIAogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2MpOwogICAgIAotICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKnZtLCBqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKQEAgLTEzMTY3
LDcgKzEzMTY3LDcgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKCkKICAgICAK
ICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7
CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5
cG9pbnRMYWJlbCgwKSk7CkBAIC0xMzI1NCw3ICsxMzI1NCw3IEBAIHZvaWQgdGVzdEVudHJ5U3dp
dGNoV2l0aENvbW1vblBhdGhzKCkKICAgICAKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9j
KTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkBAIC0xMzM3MSw3ICsx
MzM3MSw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzQW5kTm8KICAgICAK
ICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7
CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5
cG9pbnRMYWJlbCgwKSk7CkBAIC0xMzQ0OSw3ICsxMzQ0OSw3IEBAIHZvaWQgdGVzdEVudHJ5U3dp
dGNoTG9vcCgpCiAgICAgCiAgICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJvYyk7CiAgICAgCi0g
ICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5l
cmF0ZShwcm9jLCBqaXQpOwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVs
bHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3
IEBAIFZNKiB2bTsKIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGUoQjM6
OlByb2NlZHVyZSYgcHJvYykKIHsKICAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLmNvZGUo
KSk7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICBnZW5lcmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
KnZtLCBqaXQsIG51bGxwdHIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2Nyw3
ICs3NjcsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAg
ICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9Ci0gICAgICAgICAgICBqaXQuZW1pdEV4
Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAg
ICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHZtLCBDQ2FsbEhlbHBlcnM6OkludmVydGVk
RXhjZXB0aW9uQ2hlY2spOwogCiAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwogICAgICAg
ICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwpAQCAtOTMwLDcgKzkz
MCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAg
ICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlv
biA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlv
bkNoZWNrKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24g
PSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHZtLCBDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN0YXRlLnJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxl
cigpOwpAQCAtOTU5LDcgKzk1OSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhl
IHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQKICAgICAgICAg
ICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQgaXMgZm9yZ290dGVu
IGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAgLy8gcGF0aC4KLSAg
ICAgICAgICAgIGppdC5udWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkoc2NyYXRjaEdQUiwg
YmFzZUdQUik7CisgICAgICAgICAgICBqaXQubnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5
KHZtLCBzY3JhdGNoR1BSLCBiYXNlR1BSKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0
dXJlKCktPmlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RPTUpJ
VEFjY2Vzc0Nhc2VQYXRjaHBvaW50UGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRE9NSklUQWNjZXNzQ2FzZVBhdGNocG9pbnRQYXJhbXMuY3Bw
CShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRE9N
SklUQWNjZXNzQ2FzZVBhdGNocG9pbnRQYXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgaml0LnNldHVwUmVzdWx0cyhtX3Jlc3VsdCk7CiAg
ICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxs
SGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBub0V4Y2VwdGlvbiA9IGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUubV92bSwgQ0Nh
bGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKIAogICAgICAgICBzdGF0ZS5yZXN0
b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxs
U3RhdGUpOwogICAgICAgICBleGNlcHRpb25zLmFwcGVuZChqaXQuanVtcCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDEwIEBACiAjaW5jbHVkZSAiU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goVk0mIHZtKQor
dm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3Jhc2goKQogewogICAgIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CiAgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7CkBAIC01MCw3ICs0OSw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0Fu
ZENyYXMKICNlbmRpZgogCiAgICAgewotICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Cisg
ICAgICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB2
YWx1ZTsKICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKQEAgLTY1LDcgKzY0LDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgIH0KIAogICAg
IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgICAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwKQEAgLTgyLDcgKzgxLDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6
OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzIGppdCgmdm0pOworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgICAgIGppdC5w
YXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
QEAgLTk1LDcgKzk0LDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3Jh
cwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKQEAgLTEwOSw3ICsxMDgsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAgfQogCiAgICAgewot
ICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICAgICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLApAQCAtMTU1LDkgKzE1NCw5IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IGJvb2wgbGlua0NvZGVJbmxpbmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYgdm0sIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFs
dWVSZWdzKCk7CkBAIC0yMTEsMTEgKzIxMCwxMSBAQCBib29sIElubGluZUFjY2Vzczo6Y2FuR2Vu
ZXJhdGVTZWxmUHJvcGVyCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9
CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoVk0mIHZt
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvZmZzZXQpKTsKIAotICAgIENDYWxsSGVscGVycyBq
aXQoJnZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdz
IHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CkBAIC0yNTUsMTEgKzI1NCwxMSBAQCBib29s
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0CiAgICAgICAgIHx8IGFycmF5LT5p
bmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzOwogfQogCi1ib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAg
IEFTU0VSVChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOwogCi0gICAg
Q0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBHUFJS
ZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKQEAgLTI3OSw5ICsy
NzgsOSBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiAgICAgcmV0
dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbCB0YXJnZXQpCit2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkKIHsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGF1dG8g
anVtcCA9IGppdC5qdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE4
ICsxMTAsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZv
clByb3BlcnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKFZNJiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgc3Rh
dGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShWTSYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKICAgICBzdGF0aWMgYm9v
bCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwot
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoVk0mLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wKFZNJiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbCk7CisgICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0
aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wKFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9u
TGFiZWwpOwogCiAgICAgLy8gVGhpcyBpcyBoZWxwZnVsIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHNp
emUgb2YgYW4gSUMgb24KICAgICAvLyB2YXJpb3VzIHBsYXRmb3Jtcy4gV2hlbiBhZGRpbmcgYSBu
ZXcgdHlwZSBvZiBJQywgaW1wbGVtZW50CiAgICAgLy8gaXRzIHBsYWNlaG9sZGVyIGNvZGUgaGVy
ZSwgYW5kIGxvZyB0aGUgc2l6ZS4gVGhhdCB3YXkgd2UKICAgICAvLyBjYW4gaW50ZWxsaWdlbnRs
eSBjaG9vc2Ugc2l6ZXMgb24gdmFyaW91cyBwbGF0Zm9ybXMuCi0gICAgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCBzdGF0aWMgdm9pZCBkdW1wQ2FjaGVTaXplc0FuZENyYXNoKFZNJik7CisgICAgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBkdW1wQ2FjaGVTaXplc0FuZENyYXNoKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NDIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAgQ2FsbFNpdGVJbmRleCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6Om9yaQogdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRF
eHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7Ci0gICAg
aml0LT5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7Cisg
ICAgaml0LT5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKG1f
dm0pOwogICAgIGlmIChuZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgLy8gVG8gdGhlIEpJVCB0aGF0IHByb2R1Y2VzIHRoZSBvcmlnaW5hbCBleGNlcHRpb24g
aGFuZGxpbmcKICAgICAgICAgLy8gY2FsbCBzaXRlLCB0aGV5IHdpbGwgZXhwZWN0IHRoZSBPU1Ig
ZXhpdCB0byBiZSBhcnJpdmVkCiAgICAgICAgIC8vIGF0IGZyb20gZ2VuZXJpY1Vud2luZC4gVGhl
cmVmb3JlIHdlIG11c3QgbW9kZWwgd2hhdCBnZW5lcmljVW53aW5kCiAgICAgICAgIC8vIGRvZXMg
aGVyZS4gSS5lLCBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2ggYW5kIGNvcHkgY2FsbGVlIHNhdmVzLgog
Ci0gICAgICAgIGppdC0+c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGppdC0+
dm0oKS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CisgICAgICAgIGppdC0+c3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG1fdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9y
Q2F0Y2goKSk7CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9PU1JFeGl0RXhjZXB0
aW9uSGFuZGxlciA9IGppdC0+anVtcCgpOwogCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
aW5zZXJ0IGEgbmV3IGV4Y2VwdGlvbiBoYW5kbGVyIGluIHRoZSB0YWJsZQpAQCAtMTk1LDEzICsx
OTUsMTMgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdAogICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhjZXB0aW9uSGFuZGxlciwg
b3JpZ2luYWxIYW5kbGVyLm5hdGl2ZUNvZGUpOwogICAgICAgICAgICAgfSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgaml0LT5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaml0LT52bSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQt
PnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKCk7CiAgICAgICAgIGppdC0+YWRkTGlu
a1Rhc2soCiAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGppdC0+anVt
cFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgICAgICBqaXQtPmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIobV92bSk7CiAgICAgfQogfQogCkBAIC0zNTgsNyArMzU4LDcgQEAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCBQb2x5bW9ycGhpY0FjY2VzcwogCiAgICAgc3RhdGUuc2NyYXRjaEdQUiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2
bSwgY29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3Rh
dGUuaml0ID0gJmppdDsKIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUg
PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTIgKzE3
NywxNCBAQCBwcml2YXRlOgogfTsKIAogc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7Ci0g
ICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlKCkKLSAgICAgICAgOiBtX2NhbGN1bGF0ZWRSZWdpc3Rl
cnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoZmFsc2UpCisgICAgQWNjZXNzR2VuZXJhdGlv
blN0YXRlKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZtKSAKKyAgICAgICAgLCBtX2NhbGN1bGF0
ZWRSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoZmFsc2UpCiAgICAgICAgICwg
bV9uZWVkc1RvUmVzdG9yZVJlZ2lzdGVyc0lmRXhjZXB0aW9uKGZhbHNlKQogICAgICAgICAsIG1f
Y2FsY3VsYXRlZENhbGxTaXRlSW5kZXgoZmFsc2UpCiAgICAgewogICAgIH0KKyAgICBWTSYgbV92
bTsKICAgICBDQ2FsbEhlbHBlcnMqIGppdCB7IG51bGxwdHIgfTsKICAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcjsKICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlBy
ZXNlcnZlZFN0YXRlIHByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NDIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCi0gICAgOiBDQ2FsbEhl
bHBlcnMoJmRmZy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCisgICAgOiBDQ2FsbEhlbHBlcnMoZGZn
Lm1fY29kZUJsb2NrKQogICAgICwgbV9ncmFwaChkZmcpCiAgICAgLCBtX2ppdENvZGUoYWRvcHRS
ZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBtX2Jsb2NrSGVhZHMoZGZnLm51bUJsb2NrcygpKQpA
QCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5k
bGUKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5
KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGlu
ayh0aGlzKTsKIAotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKCk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKnZtKCkpOwogCiAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4
ZWMgKHRoZSBDYWxsRnJhbWUqKS4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwpAQCAtMTUzLDEzICsxNTMsMTMgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogI2VuZGlmCiAgICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoKSwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxs
ZXJGcmFtZSkpOwogCi0gICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhp
cyk7CiAKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSgpKTsKIAogICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBh
c3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKiku
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9u
SGFuZGxlCiAjZW5kaWYKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2Fs
bCgpLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CiAKLSAgICAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigpOworICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9
CiB9CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZm
ZXImIGxpbmtCCiAgICAgCiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2pzQ2FsbHMpIHsKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsocmVjb3JkLnNsb3dDYWxsLCBGdW5jdGlvblB0cihtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtKCktPmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLnNsb3dDYWxs
KSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cmVjb3JkLnRhcmdldFRvQ2hlY2spKSwKQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlKCkKIAogICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNw
YWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4KICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9y
RXhlY3V0aW9uQW5kRXhpdCgpIC0gMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBKdW1wIHN0YWNr
T3ZlcmZsb3cgPSBicmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNz
T2ZTb2Z0U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIEp1bXAgc3RhY2tPdmVy
ZmxvdyA9IGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZlNv
ZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmNvbXBpbGUoKQogICAgIG1fc3BlY3VsYXRpdmUtPmNyZWF0ZU9TUkVudHJpZXMoKTsK
ICAgICBzZXRFbmRPZkNvZGUoKTsKIAotICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91
bmlxdWU8TGlua0J1ZmZlcj4oKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKKyAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CiAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9n
cmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+
KG1fZ3JhcGgubV9wbGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDI0LDcgKzQyNCw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgTGFiZWwgZnJvbUFyaXR5Q2hl
Y2sodGhpcyk7CiAgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMg
YXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwobV9ncmFwaC5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRp
b25BbmRFeGl0KCkgLSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgIEp1bXAgc3RhY2tPdmVyZmxv
dyA9IGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZlNvZnRT
dGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgSnVtcCBzdGFja092ZXJmbG93ID0g
YnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mU29mdFN0YWNr
TGltaXQoKSksIEdQUkluZm86OnJlZ1QxKTsKIAogICAgIC8vIE1vdmUgdGhlIHN0YWNrIHBvaW50
ZXIgZG93biB0byBhY2NvbW1vZGF0ZSBsb2NhbHMKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1f
Z3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ4OCw3ICs0ODgs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIHNldEVuZE9mQ29k
ZSgpOwogCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8
TGlua0J1ZmZlcj4oKnZtKCksICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAg
ICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFs
aXplcj4obV9ncmFwaC5tX3BsYW4pOwogICAgICAgICByZXR1cm47CkBAIC00OTksNyArNDk5LDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBtX2ppdENvZGUtPnNo
cmlua1RvRml0KCk7CiAgICAgY29kZUJsb2NrKCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0
ZVNocmluayk7CiAgICAgCi0gICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVwLCBG
dW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBsaW5rQnVmZmVyLT5saW5rKG1fY2FsbEFyaXR5
Rml4dXAsIEZ1bmN0aW9uUHRyKCh2bSgpLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3Ip
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIAogICAgIGRpc2Fzc2VtYmxlKCps
aW5rQnVmZmVyKTsKIApAQCAtNjI0LDExICs2MjQsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhj
ZXB0aW9uQ2hlY2soKQogICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxs
Q2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX3NwZWN1bGF0aXZlLT5tX2N1cnJlbnROb2Rl
LT5vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7IAogICAg
IGlmICh3aWxsQ2F0Y2hFeGNlcHRpb24pIHsKICAgICAgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgg
PSBtX3NwZWN1bGF0aXZlLT5tX291dE9mTGluZVN0cmVhbUluZGV4ID8gKm1fc3BlY3VsYXRpdmUt
Pm1fb3V0T2ZMaW5lU3RyZWFtSW5kZXggOiBtX3NwZWN1bGF0aXZlLT5tX3N0cmVhbS0+c2l6ZSgp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBoYWRFeGNlcHRpb24gPSBlbWl0Tm9uUGF0
Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFk
RXhjZXB0aW9uID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKCp2bSgpKTsKICAgICAg
ICAgLy8gV2UgYXNzdW1lIGhlcmUgdGhhdCB0aGlzIGlzIGNhbGxlZCBhZnRlciBjYWxsT3BlYXJ0
aW9uKCkvYXBwZW5kQ2FsbCgpIGlzIGNhbGxlZC4KICAgICAgICAgYXBwZW5kRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0KEV4Y2VwdGlvbkNoZWNrLCBzdHJlYW1JbmRleCwgb3BDYXRjaE9yaWdpbiwg
ZXhjZXB0aW9uSGFuZGxlciwgbV9qaXRDb2RlLT5jb21tb24ubGFzdENhbGxTaXRlKCksIGhhZEV4
Y2VwdGlvbik7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChl
bWl0RXhjZXB0aW9uQ2hlY2soKSk7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChl
bWl0RXhjZXB0aW9uQ2hlY2soKnZtKCkpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBKSVRDb21waWxl
cjo6cmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVl
ZGVkKGNvbnN0IENvZGVPcmlnaW4mIGNhbGxTaXRlQ29kZU9yaWdpbiwgdW5zaWduZWQgZXZlbnRT
dHJlYW1JbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBleGNlcHRpb25DaGVja1dpdGhDYWxsRnJhbWVSb2xsYmFjaygpCiAgICAg
ewotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQo
ZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxs
RnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSgpKSk7CiAgICAgfQog
CiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0
aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgogICAgIHZv
aWQgZmFzdEV4Y2VwdGlvbkNoZWNrKCkKICAgICB7Ci0gICAgICAgIGNhbGxFeGNlcHRpb25GdXp6
KCk7CisgICAgICAgIGNhbGxFeGNlcHRpb25GdXp6KCp2bSgpKTsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3MuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpKTsKICAgICB9CiAgICAgCkBAIC0yNjgsNiArMjY4LDggQEAgcHVibGljOgogCiAgICAgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKSB7IHJldHVy
biBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjsgfQogCisgICAgVk0qIHZtKCkgeyByZXR1cm4g
Jm1fZ3JhcGgubV92bTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyOwogICAgIApAQCAtMzAwLDYgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgVmVjdG9yPExhYmVsPiBtX2Jsb2NrSGVhZHM7CiAKKwogICAgIHN0cnVjdCBKU0NhbGxSZWNv
cmQgewogICAgICAgICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwg
RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbyogaW5mbykKICAgICAgICAg
ICAgIDogZmFzdENhbGwoZmFzdENhbGwpCkBAIC0zNDIsNiArMzQ1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTGFiZWwgc2xvd1BhdGg7CiAgICAgICAgIENhbGxMaW5rSW5mbyogaW5mbzsKICAgICB9
OworCiAgICAgCiAgICAgVmVjdG9yPElubGluZUNhY2hlV3JhcHBlcjxKSVRHZXRCeUlkR2VuZXJh
dG9yPiwgND4gbV9nZXRCeUlkczsKICAgICBWZWN0b3I8SW5saW5lQ2FjaGVXcmFwcGVyPEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvcj4sIDQ+IG1fZ2V0QnlJZHNXaXRoVGhpczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJf
NjQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDgg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3Zv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4
aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25S
ZWNvdmVyeSogcmVjb3ZlcnkpCiB7Ci0gICAgLy8gUHJvLWZvcm1hIHN0dWZmLgotICAgIGlmIChP
cHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpIHsKLSAgICAgICAgU3BlY3VsYXRpb25GYWlsdXJl
RGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwot
ICAgICAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOwotICAgICAg
ICBkZWJ1Z0luZm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKLSAgICAgICAgZGVidWdJbmZvLT5ieXRl
Y29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIAot
ICAgICAgICBtX2ppdC5kZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFp
bHVyZSwgZGVidWdJbmZvKTsKLSAgICB9Ci0gICAgCiAgICAgLy8gUGVyZm9ybSBzcGVjdWxhdGlv
biByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgog
ICAgIC8vIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxh
dGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgogICAgIApAQCAtMTYwLDcgKzE1MCw3IEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKIAogICAgIC8vIFNhdmUgYWxsIHN0
YXRlIGZyb20gR1BScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KICAgICAKLSAgICBTY3JhdGNo
QnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7CisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBvcGVyYW5kcy5zaXplKCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3Jh
dGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewpAQCAtMjU1LDcgKzI0NSw3
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBtX2ppdC5l
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpOwogCiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIG1faml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgbV9qaXQuY29w
eUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CiAKICAgICAv
LyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGlu
dG8gdGhlIHN0YWNrLgogICAgIApAQCAtNDAzLDcgKzM5Myw3IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKG1faml0
LCBleGl0KTsKICAgICAKICAgICAvLyBBbmQgZmluaXNoLgotICAgIGFkanVzdEFuZEp1bXBUb1Rh
cmdldChtX2ppdCwgZXhpdCk7CisgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBtX2ppdCwg
ZXhpdCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lv
biAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjAgKzM4LDEwIEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVy
YW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5
KQogewogICAgIG1faml0LmppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAKLSAgICAvLyBQcm8tZm9y
bWEgc3R1ZmYuCi0gICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkgewotICAgICAg
ICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlv
bkZhaWx1cmVEZWJ1Z0luZm87Ci0gICAgICAgIGRlYnVnSW5mby0+Y29kZUJsb2NrID0gbV9qaXQu
Y29kZUJsb2NrKCk7Ci0gICAgICAgIGRlYnVnSW5mby0+a2luZCA9IGV4aXQubV9raW5kOwotICAg
ICAgICBkZWJ1Z0luZm8tPmJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwotICAgIH0KLSAgICAKICAgICAv
LyBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5
IHdoZW4gYW4gb3BlcmF0aW9uCiAgICAgLy8gc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2
ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUuCiAgICAgCkBAIC0x
ODQsNyArMTc0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
CiAgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVy
LgogICAgIAotICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3BlcmFuZHMuc2l6
ZSgpKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7CiAgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICAKICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CkBAIC0yNjUsNyArMjU1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgIG1faml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAK
ICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgbV9qaXQuY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICBtX2pp
dC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKTsKIAog
ICAgIC8vIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3Vs
dHMgaW50byB0aGUgc3RhY2suCiAgICAgCkBAIC0zOTAsNyArMzgwLDcgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
bV9qaXQsIGV4aXQpOwogCiAgICAgLy8gQW5kIGZpbmlzaC4KLSAgICBhZGp1c3RBbmRKdW1wVG9U
YXJnZXQobV9qaXQsIGV4aXQpOworICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldCh2bSwgbV9qaXQs
IGV4aXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAy
MTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NiwxMyArMTQ2LDEzIEBAIHZvaWQgY29tcGlsZU9TUkV4
aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwog
CiAgICAgewotICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBl
eGl0Q29tcGlsZXIoaml0KTsKIAogICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vu
d2luZCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIGFjdGluZyBhcyBhIGRlZmFjdG8gb3BfY2F0
Y2ggYmVjYXVzZSB3ZSBhcnJpdmUgaGVyZSBmcm9tIGdlbmVyaWNVbndpbmQoKS4KICAgICAgICAg
ICAgIC8vIFNvLCB3ZSBtdXN0IHJlc3RvcmUgb3VyIGNhbGwgZnJhbWUgYW5kIHN0YWNrIHBvaW50
ZXIuCi0gICAgICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgICAgICAgICBqaXQubG9h
ZFB0cih2bS0+YWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAgIGppdC5hZGRQdHIoCkBAIC0xNzEsNyArMTcx
LDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBq
aXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJz
b2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9
CiAKLSAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIG9wZXJhbmRzLCByZWNv
dmVyeSk7CisgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdCgqdm0sIGV4aXQsIG9wZXJh
bmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAogICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NP
REVfSUYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JF
eGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5
Kik7CisgICAgdm9pZCBjb21waWxlRXhpdChWTSYsIGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVy
YW5kczxWYWx1ZVJlY292ZXJ5PiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxI
ZWxwZXJzCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOwogfQogCi12
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhp
dEJhc2UmIGV4aXQpCit2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICBqaXQubWVtb3J5RmVu
Y2UoKTsKICAgICAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChDQ2FsbEhlbHBlcnMmCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVy
KCkpIHsKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVl
ZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCi0gICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlciwgaml0LnZtKCktPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNo
KCkpOworICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZt
LmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KICAgICAKICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJl
Z1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgaGFu
ZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7
Ci12b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0
QmFzZSYpOwordm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mLCBDQ2FsbEhlbHBlcnMmLCBj
b25zdCBPU1JFeGl0QmFzZSYpOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSklUQ29kZVR5cGU+CiB2
b2lkIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRodW5rKE1hY3JvQXNzZW1i
bGVyJiBqaXQsIFZNKiB2bSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM0LDcgKzE4MzQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1faml0LmVt
aXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRl
bXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVnYXRlUmVzdWx0KTsKKyAgICAgICAg
bV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqbV9qaXQudm0oKSwgYXJnMS5qc1ZhbHVl
UmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZw
cigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgbmVn
YXRlUmVzdWx0KTsKICAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk3OSw3ICsxOTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZhbHVlUmVncywgcmVzdWx0R1BSLCB0
ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOworICAgICAgICBtX2ppdC5lbWl0Q29u
dmVydFZhbHVlVG9Cb29sZWFuKCptX2ppdC52bSgpLCB2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwgdGVt
cC5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgYnJhbmNoVGVzdDMyKEpJ
VENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIG5vdFRha2VuKTsKICAgICAgICAganVtcCh0YWtl
biwgRm9yY2VKdW1wKTsKIApAQCAtNTUzMCw3ICs1NTMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogCi0gICAg
ICAgIG1faml0LmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgICAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KCptX2ppdC52bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CiAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKQEAgLTU1
NTIsNyArNTU1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKIAotICAgICAgICBtX2ppdC5lbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0oKSwgc2hh
ZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFs
dWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVSZWdzKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9i
amVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
b2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFy
Z0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxP
YmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZG9u
ZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9i
amVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
b2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKGFy
Z0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUoKm1faml0LnZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQ
UiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCB0YWtlbik7CiAKQEAgLTE4NzYsNyArMTg3Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVj
dHVyZSh2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIsIHNj
cmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTE5ODIsNyArMTk4Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKICAgICAgICAgfQogICAgICAgICBib29sIG5lZ2F0
ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4o
SlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIuZnBy
KCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVl
VG9Cb29sZWFuKCptX2ppdC52bSgpLCBKU1ZhbHVlUmVncyhhcmcxR1BSKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CiAgICAgICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTIwMjcsNyArMjAyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIAotICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZtKCksIHZhbHVlR1BSLCBzdHJ1
Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMjE1NSw3
ICsyMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CiAKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwotICAgICAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIsIHRlbXBG
UFIsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKm1faml0LnZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCB2YWx1ZUZQUiwgdGVt
cEZQUiwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwog
ICAgIAogICAgICAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBy
ZXN1bHRHUFIsIHRha2VuKTsKICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwpAQCAtNDExOCw3
ICs0MTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CiAgICAg
ICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNh
cGFjaXR5R1BSKTsKLSAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgICAgIG1faml0
Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1
bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogICAgICAgICAKQEAg
LTQxNDQsNyArNDE0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIGFsbG9j
YXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2Nh
dG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBtX2ppdC5lbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZl
bmNlKCptX2ppdC52bSgpKTsKIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1
Y3R1cmUpKTsKICAgICAgICAgCkBAIC00NzQxLDcgKzQ3NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxP
YmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9i
YWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodmFsdWUu
Z3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSgqbV9qaXQudm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwg
c2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
bW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRD
b21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RH
UFIsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIH0KQEAgLTU3MDIsNyArNTcwMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNoYWRvd1BhY2tldCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHNo
YWRvd1BhY2tldC5ncHIoKTsKIAotICAgICAgICBtX2ppdC5lbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICAgICAg
bV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqbV9qaXQudm0oKSwgc2hhZG93UGFja2V0
UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CkBAIC01NzI0LDcgKzU3MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzaGFkb3dQYWNr
ZXQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSBzaGFkb3dQYWNrZXQu
Z3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgICAgIG1faml0LmVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoKm1faml0LnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyA9IEpT
VmFsdWVSZWdzKHRoaXNWYWx1ZS5ncHIoKSk7CkBAIC02MDA3LDcgKzYwMDcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBCiAgICAgCiAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0
b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgIAotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0o
KSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxs
QXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICAKICAgICBtX2ppdC5lbWl0
SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uoc3RvcmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICBtX2pp
dC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0R2V0TGVuZ3RoKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgbGVu
Z3RoR1BSLCBib29sIGluY2x1ZGVUaGlzKQpAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcDIodGhpcyk7Ci0gICAgbV9qaXQuZW1pdExv
YWRTdHJ1Y3R1cmUoYmFzZVJlZywgdGVtcC5ncHIoKSwgdGVtcDIuZ3ByKCkpOworICAgIG1faml0
LmVtaXRMb2FkU3RydWN0dXJlKCptX2ppdC52bSgpLCBiYXNlUmVnLCB0ZW1wLmdwcigpLCB0ZW1w
Mi5ncHIoKSk7CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUsCiAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKQEAgLTE3NDUsNyArMTc0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
dXJyZW50QmxvY2sKICAgICAgICAgfQogCiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURG
R0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50
Tm9kZSkgIT0gRG9lc05vdEV4aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAg
ICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAg
ICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCptX2ppdC52bSgpKTsKIAogICAg
ICAgICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoKS5hcHBlbmRJdGVtKG1faml0Lmxh
YmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBtX29yaWdpbi5zZW1hbnRpYyk7CiAKQEAgLTMwODUs
NyArMzA4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm8KICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCgmbV9qaXQpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHBlcmZvcm1EZWZhdWx0SGFzSW5zdGFuY2UgPSBtX2ppdC5icmFuY2g4KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJl
ZywgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihQcm94eU9iamVj
dFR5cGUpKTsKLSAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoUmVnLCBzY3JhdGNo
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUoKm1faml0LnZt
KCksIHNjcmF0Y2hSZWcsIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90
eXBlT2Zmc2V0KCkgKyBDZWxsUGF5bG9hZE9mZnNldCksIHNjcmF0Y2hSZWcpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGlzSW5zdGFuY2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBzY3JhdGNoUmVnLCBwcm90b3R5cGVSZWcpOwogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC00MDIyLDcgKzQwMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJv
cGUoTm9kCiAgICAgfQogICAgIG1faml0LnN0b3JlMzIoYWxsb2NhdG9yR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAg
Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2pp
dC52bSgpKTsKICAgICAKICAgICBzd2l0Y2ggKG51bU9wR1BScykgewogICAgIGNhc2UgMjoKQEAg
LTYzMjEsNyArNjMyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHbG9iYWxP
YmoKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvYmplY3QodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0gICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUob2JqZWN0LmdwcigpLCByZXN1
bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOworICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKCpt
X2ppdC52bSgpLCBvYmplY3QuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KQEAgLTY0NTAsNyArNjQ1MCw3IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgU3BlY3UKICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBleGVjdXRhYmxlKSwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRPZkV4ZWN1dGFibGUpKTsKICAgICBtX2pp
dC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIG9mZnNldE9mUmFyZURhdGEpKTsKICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsK
KyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24oTm9kZSogbm9kZSkKQEAgLTY2NTIsNyArNjY1Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmEKICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKFNj
b3BlT2Zmc2V0KGkpKSkpOwogICAgIH0KICAgICAKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsK
KyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTY4MTUsNyArNjgxNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwogICAgIH0KICAgICAgICAgCi0gICAgbV9qaXQubXV0YXRvckZlbmNlKCk7Cisg
ICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKICAgICAgICAgCiAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtNzAzOCw3ICs3MDM4LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKEpTRml4ZWRBcnJheTo6b2Zmc2V0T2ZEYXRhKCkpLCBzY3JhdGNoMUdQUik7CiAKLSAg
ICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNGaXhlZEFycmF5Pihy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZSht
X2ppdC5ncmFwaCgpLm1fdm0uZml4ZWRBcnJheVN0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoMUdQ
Uiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVt
aXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpTRml4ZWRBcnJheT4oKm1faml0LnZtKCksIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1f
aml0LmdyYXBoKCkubV92bS5maXhlZEFycmF5U3RydWN0dXJlLmdldCgpKSksIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgbV9qaXQuc3Rv
cmUzMihsZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGaXhl
ZEFycmF5OjpvZmZzZXRPZlNpemUoKSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gxR1BSKTsKQEAgLTcwODAsNyArNzA4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTcHJlYWQoTm9kZSoKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwor
ICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwogCiAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uU3ByZWFkRmFzdEFycmF5LCByZXN1bHRH
UFIsIGFyZ3VtZW50KSk7CkBAIC03MzgyLDcgKzczODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlTbGljZShOCiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVCdXR0ZXJmbHko
c3RvcmFnZVJlc3VsdEdQUiwgc2l6ZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHJlc3Vs
dEdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIGVtaXRJbml0aWFsaXplQnV0dGVyZmx5KHN0
b3JhZ2VSZXN1bHRHUFIsIHNpemVHUFIsIGVtcHR5VmFsdWVSZWdzLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgdGVtcFZh
bHVlLCBzdG9yYWdlUmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2Vz
KTsKLSAgICAgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgICAgICAgICAgbV9qaXQu
bXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsKIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTdHJ1
Y3R1cmVWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHRlbXBW
YWx1ZSwgc2l6ZUdQUiwgc3RvcmFnZVJlc3VsdEdQUiwgc2NyYXRjaEdQUikpOwpAQCAtNzc0NSw3
ICs3NzQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU51a2VTdHJ1Y3R1cgogICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgbV9qaXQubnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVy
Zmx5KHN0b3JhZ2VHUFIsIGJhc2VHUFIpOworICAgIG1faml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9y
ZUJ1dHRlcmZseSgqbV9qaXQudm0oKSwgc3RvcmFnZUdQUiwgYmFzZUdQUik7CiAgICAgCiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CkBAIC04MTg0LDcgKzgxODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3U3RyaW5nT2JqCiAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICNlbmRpZgogICAgIAotICAg
IG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0o
KSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIsIG9w
ZXJhbmRHUFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7CkBAIC04MjYzLDcgKzgyNjMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0z
MihGYXN0VHlwZWRBcnJheSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSk7CiAgICAgCi0gICAgbV9q
aXQubXV0YXRvckZlbmNlKCk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52bSgpKTsK
ICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCiAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBl
KSwKQEAgLTkzMzIsOSArOTMzMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9y
ZUJhcnJpZXIKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb2s7CiAgICAgCiAgICAgaWYgKGlz
RmVuY2VkKSB7Ci0gICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoKGJhc2VHUFIs
IHNjcmF0Y2gxR1BSKSk7CisgICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoKCpt
X2ppdC52bSgpLCBiYXNlR1BSLCBzY3JhdGNoMUdQUikpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRl
ZCgpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmTXV0
YXRvckZlbmNlTm90TmVlZGVkKCptX2ppdC52bSgpKTsKICAgICAgICAgbV9qaXQubWVtb3J5RmVu
Y2UoKTsKICAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2Uo
YmFzZUdQUikpOwogICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIxNDQy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjg4OSw3ICsyODg5LDcgQEAgcHVibGljOgogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwg
R1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENsYXNzVHlwZT4ocmVzdWx0
R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgsIHNpemUpOworICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNp
emU8Q2xhc3NUeXBlPigqbV9qaXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2Us
IHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgsIHNpemUpOwogICAgIH0KIAogICAg
IC8vIENvbnZlbmllbmNlIGFsbG9jYXRvciBmb3IgYSBidWlsdC1pbiBvYmplY3QuCkBAIC0yODk3
LDIwICsyODk3LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQ
UlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIG1faml0LmVt
aXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3Jh
Z2UsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5l
bWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KCptX2ppdC52bSgpLCByZXN1bHRHUFIsIHN0
cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0
dXJlVHlwZT4gLy8gU3RydWN0dXJlVHlwZSBhbmQgU3RvcmFnZVR5cGUgY2FuIGJlIEdQUiBvciBJ
bW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3QoR1BSUmVn
IHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVW
YXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwgYWxs
b2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgICAg
ICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8Q2xhc3NUeXBlPigqbV9q
aXQudm0oKSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDbGFzc1R5cGU+CiAgICAgdm9pZCBlbWl0QWxsb2NhdGVEZXN0cnVjdGlibGVPYmplY3QoR1BS
UmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsIAogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZURlc3Ry
dWN0aWJsZU9iamVjdDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJlLmdldCgpLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9j
YXRlRGVzdHJ1Y3RpYmxlT2JqZWN0PENsYXNzVHlwZT4oKm1faml0LnZtKCksIHJlc3VsdEdQUiwg
c3RydWN0dXJlLmdldCgpLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAg
ICB9CiAKICAgICB2b2lkIGVtaXRBbGxvY2F0ZVJhd09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBS
ZWdpc3RlcmVkU3RydWN0dXJlLCBHUFJSZWcgc3RvcmFnZUdQUiwgdW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBBc3NlbWJseUhl
bHBlcnMgaml0KHZtLCBudWxscHRyKTsKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIp
OwogCiAgICAgLy8gV2UgZ2V0IHBhc3NlZCB0aGUgYWRkcmVzcyBvZiBhIHNjcmF0Y2ggYnVmZmVy
LiBUaGUgZmlyc3QgOC1ieXRlIHNsb3Qgb2YgdGhlIGJ1ZmZlcgogICAgIC8vIGlzIHRoZSBmcmFt
ZSBzaXplLiBUaGUgc2Vjb25kIDgtYnl0ZSBzbG90IGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIHdl
IGFyZSBzdXBwb3NlZCB0bwpAQCAtMTM1LDcgKzEzNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFbnRyeVRodW5rR2VuZXIKICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1VucmVhc29u
YWJsZU9TUkVudHJ5SnVtcERlc3RpbmF0aW9uKTsKIAogICAgIG9rLmxpbmsoJmppdCk7Ci0gICAg
aml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigp
OworICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoKnZtKTsKICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAogICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDE2ICsx
MjYsMTYgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIC8v
IFdlIHdpbGwgYWRkIGV4Y2VwdGlvbiBoYW5kbGVycyB3aGlsZSBnZW5lcmF0aW5nLgogICAgIGNv
ZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOwogCi0gICAgQ0NhbGxIZWxwZXJzIGpp
dCgmdm0sIGNvZGVCbG9jayk7CisgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAg
IEIzOjpnZW5lcmF0ZSgqc3RhdGUucHJvYywgaml0KTsKIAogICAgIC8vIEVtaXQgdGhlIGV4Y2Vw
dGlvbiBoYW5kbGVyLgogICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7
Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
KTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwog
ICAgIGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3Vw
RXhjZXB0aW9uSGFuZGxlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCi0jaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5j
cHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6
eVNsb3dQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIExhenlT
bG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBjCiAKICAgICBWTSYgdm0gPSAqY29kZUJsb2Nr
LT52bSgpOwogCi0gICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIEdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOwog
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uSnVtcHM7CiAgICAgcGFyYW1zLmV4
Y2VwdGlvbkp1bXBzID0gbV9leGNlcHRpb25UYXJnZXQgPyAmZXhjZXB0aW9uSnVtcHMgOiBudWxs
cHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGhDYWxsLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1
bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAg
IFZNJiB2bSwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKIHsKICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVH
ZW5lcmF0b3IoCi0gICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgIFs9LCAmdm1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgcGFyYW1zLmxhenlTbG93UGF0
aC0+dXNlZFJlZ2lzdGVycygpLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5k
ZXgoKSwKKyAgICAgICAgICAgICAgICB2bSwgcGFyYW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lz
dGVycygpLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5kZXgoKSwKICAgICAg
ICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIGZ1bmN0aW9uLCByZXN1bHQsIGFyZ3Vt
ZW50cy4uLik7CiAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgp
KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJ
KHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0
ZSkKIAogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCi0gICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0sIGNvZGVCbG9jayk7CisgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyOwogCkBAIC0xNDIsMTEg
KzE0MiwxMSBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKIAogICAgICAgICAgICAgYXV0
byBub0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JF
cXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApKTsKLSAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0pOwor
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSA9
IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogICAgICAgICAgICAg
bm9FeGNlcHRpb24ubGluaygmaml0KTsKIAogICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDkgKzIwMCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0
ZWQuCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spKTsKIAorICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKKwogICAgICAgICAvLyBT
dGFjayBPdmVyZmxvdyBDaGVjay4KICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1f
Z3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhZGRyZXNzT2ZTdGFja0xp
bWl0KHZtKCkuYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzc09mU3RhY2tMaW1pdCh2bS0+YWRkcmVzc09mU29m
dFN0YWNrTGltaXQoKSk7CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogc3RhY2tPdmVyZmxvd0hh
bmRsZXIgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwogICAgICAgICBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihtX2Z0bFN0YXRlLCBDb2Rl
T3JpZ2luKDApKTsKICAgICAgICAgc3RhY2tPdmVyZmxvd0hhbmRsZXItPmFwcGVuZFNvbWVSZWdp
c3RlcihtX2NhbGxGcmFtZSk7CkBAIC0yMjYsMTYgKzIyOCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtKTsKIAogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCB0aHJvd0NhbGwgPSBqaXQuY2FsbCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhj
ZXB0aW9uSGFuZGxlckNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewpAQCAtNDA3NCw3ICs0MDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0g
bGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwKICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
LAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLApAQCAtNDEzOSwxOCArNDE0MSwx
OCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgK
ICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBpZiAoaXNH
ZW5lcmF0b3JGdW5jdGlvbikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcih2bSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoaXNBc3luY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKHZtKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSgpLAogICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9p
bnQsCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwpAQCAtNDIxMCw3ICs0MjEyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAg
IExWYWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25z
dCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6Okdl
bmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwK
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBsb2Nh
dGlvbnNbMF0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFj
aXR5KSk7CkBAIC00ODIyLDcgKzQ4MjQsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBMVmFs
dWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9XSAo
Y29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRo
OjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3Iodm0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJy
YXlXaXRoU2l6ZUZvclR5cGUodHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUu
Z2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOwpAQCAtNTA4Nyw3ICs1MDg5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAogICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bnNbMl0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0p
OwpAQCAtNTA5NSw3ICs1MDk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSAzOgogICAgICAg
ICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3Iodm0oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VSb3Bl
MywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9u
c1szXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSwg
a2lkc1syXSk7CkBAIC01NTE0LDcgKzU1MTYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGxhenlT
bG93UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJl
ZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3Iodm0oKSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTm90aWZ5
V3JpdGUsIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC02
NDQ4LDcgKzY0NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhF
eGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxs
KEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxw
ZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0
aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hl
Y2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsK
IAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CkBAIC02
NzU1LDcgKzY3NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhF
eGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5jYWxs
KEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxw
ZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0
aW9uQ2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hl
Y2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsK
IAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMu
cHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAtNjk0Miw3ICs2OTQ0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJlZ1Qx
KTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Yml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMt
PmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhj
ZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUtPnZt
KCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVy
czo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9u
WmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgICAgIApAQCAtNzk4
Nyw3ICs3OTg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IG5vdENlbGxDYXNlKTsKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk9iamVjdElzT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgfSwgdmFsdWUpOwpAQCAtODAzNyw3ICs4
MDM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgo
CiAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVM
YXp5Q2FsbEdlbmVyYXRvcih2bSgpLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25PYmpl
Y3RJc0Z1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgfSwgdmFsdWUpOwpAQCAtODc4Myw3ICs4Nzg1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgc2xvd09iamVjdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAg
ICAgICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRl
cmZseVdpdGhJbmRleGluZ0hlYWRlckFuZFZlY3Rvckxlbmd0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkp
OwpAQCAtODc5Miw3ICs4Nzk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBzbG93T2JqZWN0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0
dGVyZmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAg
LTg5OTIsNyArODk5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGRvZXNuJ3QgaW5pdGlhbGl6
ZSBldmVyeSBzbG90IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gZG8gdGhhdCBoZXJlLgog
ICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJl
Y3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJl
Y3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHRhYmxlKSwKQEAgLTkwNDcsNyArOTA0OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgbGF6eVNs
b3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwg
b3BlcmF0aW9uSGFuZGxlVHJhcHMsIEludmFsaWRHUFJSZWcpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC05NzE1LDE0ICs5
NzE3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5KSB7CiAgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5
U2xvd1BhdGgoCiAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKHZtKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0
ZVNpbXBsZVByb3BlcnR5U3RvcmFnZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVJblZhbHVl
cykpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA4MDMsNyArMTA4MDUsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAg
ICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcih2bSgpLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3Qs
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgfSk7CkBA
IC0xMDkyMSw3ICsxMDkyMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1
bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtKCksCiAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwKICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIoKSk7CiAgICAgICAg
ICAgICB9LApAQCAtMTE2NjksNyArMTE2NzEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFibGUpOwogICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0oKSwKICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9i
YWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgfSwgdmFs
dWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsMTIgKzE4MSwx
MiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAvLyBUaGlzIGNvZGUgcmVxdWlyZXMg
ZnJhbWVQb2ludGVyUmVnaXN0ZXIgaXMgdGhlIHNhbWUgYXMgY2FsbEZyYW1lUmVnaXN0ZXIKICAg
ICBzdGF0aWNfYXNzZXJ0KE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciA9PSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgIk1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciBhbmQgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIgbXVzdCBiZSB0aGUgc2FtZSIp
OwogCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0KGNvZGVCbG9jayk7CiAKICAgICAvLyBUaGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBk
byBpcyByZXN0YWJsaXNoIG91ciBmcmFtZSBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCiAg
ICAgaWYgKGV4aXQuaXNHZW5lcmljVW53aW5kSGFuZGxlcigpKSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7IC8vIFRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0
aGlzIGV4aXQsIGxpa2UgYXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGZpZWxkIHNob3VsZCBiZSBu
b24tbnVsbC4KLSAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgICAgIGppdC5sb2FkUHRyKHZt
LT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoCiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQp
OwogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKLSAgICBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoaml0LCBleGl0KTsKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoKnZtLCBq
aXQsIGV4aXQpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNv
ZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMTQ0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTAgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbEtleS5oIgotI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKLWNsYXNzIFN0YXRlOwotCiBjbGFzcyBTbG93UGF0aENhbGwgewogcHVibGljOgog
ICAgIFNsb3dQYXRoQ2FsbCgpIHsgfQpAQCAtNzksNyArNzcsNyBAQCBwcml2YXRlOgogCiB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgogU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRp
b24oCi0gICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYg
aml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsCisgICAgVk0mIHZt
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIEND
YWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKICAgICBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7
CiAgICAgU2xvd1BhdGhDYWxsIGNhbGw7CkBAIC04OSwxMyArODcsMTMgQEAgU2xvd1BhdGhDYWxs
IGNhbGxPcGVyYXRpb24oCiAgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9u
LnZhbHVlKCkpOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICBleGNl
cHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgICAgICBl
eGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKSk7CiAgICAg
cmV0dXJuIGNhbGw7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBT
bG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwK
KyAgICBWTSYgdm0sIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBl
cnMmIGppdCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHRHUFIsCiAgICAgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCiB7CkBAIC0xMDQsNyAr
MTAyLDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAg
fQotICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKHVzZWRSZWdpc3RlcnMsIGppdCwgZXhjZXB0aW9u
VGFyZ2V0LCBmdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmd1bWVudHMuLi4pOworICAgIHJldHVybiBj
YWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVu
Y3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihTdGF0ZSYsIENvZGVPcmlnaW4pOwpAQCAtMTE1LDcgKzEx
Myw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQogewogICAgIHJldHVybiBjYWxsT3BlcmF0
aW9uKAotICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNhbGxTaXRlSW5kZXhGb3JDb2RlT3Jp
Z2luKHN0YXRlLCBjb2RlT3JpZ2luKSwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlvbiwKKyAgICAg
ICAgc3RhdGUudm0oKSwgdXNlZFJlZ2lzdGVycywgaml0LCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9y
aWdpbihzdGF0ZSwgY29kZU9yaWdpbiksIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sCiAgICAg
ICAgIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIGNsYXNzIFN0
YXRlIHsKIHB1YmxpYzoKICAgICBTdGF0ZShERkc6OkdyYXBoJiBncmFwaCk7CiAgICAgflN0YXRl
KCk7CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBncmFwaC5tX3ZtOyB9CiAgICAgCiAgICAgLy8g
Tm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25z
aWJpbGl0eSBvZgogICAgIC8vIEZUTCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZl
Y3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgZW51bSBjbGFzcyBGcmFtZUFuZFN0YWNrQWRqdXN0bWVudFJlcXVpcgogc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAogICAgIFZN
KiB2bSwgRnVuY3Rpb25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWly
ZW1lbnQgZnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1aXJlbWVudCkKIHsKLSAgICBBc3NlbWJs
eUhlbHBlcnMgaml0KHZtLCAwKTsKKyAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwog
CiAgICAgaWYgKGZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQgPT0gRnJhbWVBbmRT
dGFja0FkanVzdG1lbnRSZXF1aXJlbWVudDo6TmVlZGVkKSB7CiAgICAgICAgIC8vIFRoaXMgbmVl
ZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSB1c2UgdGhlIHNjcmF0Y2ggYnVmZmVyIGJlY2F1c2UgdGhp
cyBmdW5jdGlvbiBhbHNvIHVzZXMgdGhlIHNjcmF0Y2ggYnVmZmVyLgpAQCAtMTY2LDcgKzE2Niw3
IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFzc2VtYmwKIAogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgU2xv
d1BhdGhDYWxsS2V5JiBrZXkpCiB7Ci0gICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0sIDApOwor
ICAgIEFzc2VtYmx5SGVscGVycyBqaXQoMCk7CiAgICAgCiAgICAgLy8gV2Ugd2FudCB0byBzYXZl
IHRoZSBnaXZlbiByZWdpc3RlcnMgYXQgdGhlIGdpdmVuIG9mZnNldCwgdGhlbiB3ZSB3YW50IHRv
IHNhdmUgdGhlCiAgICAgLy8gb2xkIHJldHVybiBhZGRyZXNzIHNvbWV3aGVyZSBwYXN0IHRoYXQg
b2Zmc2V0LCBhbmQgdGhlbiBmaW5hbGx5IHdlIHdhbnQgdG8gbWFrZSB0aGUKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lv
biAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw4IEBAIFJlZ2lzdGVyKiBDYWxsRnJh
bWU6OnRvcE9mRnJhbWVJbnRlcm5hbCgKIAogSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6dm1F
bnRyeUdsb2JhbE9iamVjdCgpCiB7Ci0gICAgaWYgKGNhbGxlZSgpLT5pc09iamVjdCgpKSB7IAor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSgpLmlzQ2VsbCgpKTsKKyAgICBpZiAoY2FsbGVlKCku
YXNDZWxsKCktPmlzT2JqZWN0KCkpIHsgCiAgICAgICAgIGlmICh0aGlzID09IGxleGljYWxHbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKQogICAgICAgICAgICAgcmV0dXJuIGxleGljYWxHbG9i
YWxPYmplY3QoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgorI2luY2x1ZGUg
IkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNs
dWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgpAQCAtODgsNyArODks
NyBAQCBuYW1lc3BhY2UgSlNDICB7CiAKICAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsgfQog
ICAgICAgICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25z
dCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5ib3hlZENlbGwoKTsgfQor
ICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhp
c1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KICAgICAgICAgU1VQUFJFU1Nf
QVNBTiBKU1ZhbHVlIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlSlNWYWx1ZSgpOyB9CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2td
LlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZD
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMg
KyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVCaXRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxl
ZTsKK30KKworY2xhc3MgSlNDZWxsOworCitjbGFzcyBDYWxsZWVCaXRzIHsKK3B1YmxpYzoKKyAg
ICBDYWxsZWVCaXRzKCkgPSBkZWZhdWx0OworICAgIENhbGxlZUJpdHModm9pZCogcHRyKSA6IG1f
cHRyKHB0cikgeyB9IAorCisgICAgQ2FsbGVlQml0cyYgb3BlcmF0b3I9KEpTQ2VsbCogY2VsbCkK
KyAgICB7CisgICAgICAgIG1fcHRyID0gY2VsbDsKKyAgICAgICAgQVNTRVJUKCFpc1dhc20oKSk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIGlzV2FzbSgpIGNvbnN0
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIDE7IH0KKyAgICBib29s
IGlzQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAm
IDE7IH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBhc0NlbGwoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFpc1dhc20oKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U0NlbGwqPihtX3B0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBXYXNtOjpXZWJBc3Nl
bWJseUNhbGxlZSogYXNXYXNtQ2FsbGVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1dhc20oKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V2FzbTo6V2ViQXNzZW1ibHlD
YWxsZWUqPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3B0cikgJiB+MSk7CisgICAgfQorCisg
ICAgdm9pZCogcmF3UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCogbV9wdHIgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTQg
QEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlG
b3JGcmFtZUNhcHR1cmUpIHsKLSAgICAgICAgICAgIGlmICghdmlzaXRvci0+aXNXYXNtRnJhbWUo
KQotICAgICAgICAgICAgICAgICYmICEhdmlzaXRvci0+Y29kZUJsb2NrKCkKLSAgICAgICAgICAg
ICAgICAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVp
bHRpbkZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgp
KQorICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZTo6d2FzbSgpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3It
PmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAg
U3RhY2tGcmFtZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCks
IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tG
cmFtZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2Nr
KCksIHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tGcmFtZShtX3ZtLCAgdmlzaXRvci0+Y2FsbGVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
U3RhY2tGcmFtZShtX3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSkpOwogICAgICAgICAg
ICAgfQogICAgIAogICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVy
ZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
LmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CiAgICAgICAgIGludDMyX3QmIHRhZygp
OwogCisgICAgICAgIHZvaWQqIHBvaW50ZXIoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVn
aXN0ZXIgd2l0aEludChpbnQzMl90IGkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVy
IHIgPSBqc051bWJlcihpKTsKQEAgLTE5NSw2ICsxOTcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjpwb2ludGVy
KCkgY29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHUuZW5j
b2RlZFZhbHVlLnB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHBheWxvYWQoKSk7CisjZW5kaWYKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
UmVnaXN0ZXI6OnBheWxvYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHUuZW5jb2Rl
ZFZhbHVlLmFzQml0cy5wYXlsb2FkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklu
bGluZWRGcmFtZShDCiAgICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFt
ZS5tX0NhbGxlclZNRW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lOwogICAgIG1f
ZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwogCi0gICAgSlNDZWxsKiBjYWxsZWUgPSBjYWxs
RnJhbWUtPmNhbGxlZSgpOworICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxs
ZWUoKTsKICAgICBtX2ZyYW1lLm1fY2FsbGVlID0gY2FsbGVlOwogCi0gICAgaWYgKGNhbGxlZS0+
aXNBbnlXYXNtQ2FsbGVlKCpjYWxsZWUtPnZtKCkpKSB7CisgICAgaWYgKGNhbGxlZS5pc1dhc21G
cmFtZSgpKSB7CiAgICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAg
IG1fZnJhbWUubV9jb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNv
ZGVPZmZzZXQgPSAwOwpAQCAtMjU0LDE0ICsyNTQsOCBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
U3RhY2tWaXNpdG9yOjpGcmFtCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKGlz
V2FzbUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVl
KCkpIHsKLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oKmNhbGxlZS0+dm0oKSwgY2FsbGVl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOwotICAgICAgICAgICAgLy8gT3RoZXIgd2FzbSBjYWxsZWVzIChlLmcsIHN0dWJzKSBkb24n
dCB1c2UgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyBub3RoaW5nIG5lZWRzCi0gICAgICAgICAg
ICAvLyB0byBiZSByZXN0b3JlZCBmb3IgdGhlbS4KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IHRoaXMt
PmNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpOworICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKQEAgLTI3Niw3ICsyNzAsNiBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9y
OjpGcmFtCiBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lKCkgY29uc3QK
IHsKICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2Fs
bGVlKCk7CiAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKICAgICBjYXNlIENvZGVUeXBlOjpX
YXNtOgpAQCAtMjg4LDEyICsyODEsMTQgQEAgU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1
bmN0aW9uTmFtZQogICAgIGNhc2UgQ29kZVR5cGU6Ok1vZHVsZToKICAgICAgICAgdHJhY2VMaW5l
ID0gQVNDSUlMaXRlcmFsKCJtb2R1bGUgY29kZSIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IENvZGVUeXBlOjpOYXRpdmU6CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOiB7CisgICAgICAg
IEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChj
YWxsZWUpCiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Y2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KGNhbGxlZSkpLmltcGwoKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246Ci0gICAgICAgIHRyYWNl
TGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwganNDYXN0
PEpTT2JqZWN0Kj4oY2FsbGVlKSkuaW1wbCgpOworICAgIH0KKyAgICBjYXNlIENvZGVUeXBlOjpG
dW5jdGlvbjogCisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShj
YWxsRnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4odGhpcy0+Y2FsbGVlKCkuYXNDZWxs
KCkpKS5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZVR5cGU6Okdsb2JhbDoK
ICAgICAgICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJnbG9iYWwgY29kZSIpOwpAQCAtNDU1
LDcgKzQ1MCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmUKICAg
ICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJJbmxpbmVDYWxsRnJhbWU6ICIsIFJhd1BvaW50
ZXIobV9pbmxpbmVDYWxsRnJhbWUpLCAiXG4iKTsKICNlbmRpZgogCi0gICAgICAgIG91dC5wcmlu
dChpbmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCkpLCAiXG4iKTsKKyAgICAg
ICAgb3V0LnByaW50KGluZGVudCwgImNhbGxlZTogIiwgUmF3UG9pbnRlcihjYWxsZWUoKS5yYXdQ
dHIoKSksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAicmV0dXJuUEM6ICIsIFJh
d1BvaW50ZXIocmV0dXJuUEMpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNh
bGxlckZyYW1lOiAiLCBSYXdQb2ludGVyKGNhbGxlckZyYW1lKSwgIlxuIik7CiAgICAgICAgIHVu
c2lnbmVkIGxvY2F0aW9uUmF3Qml0cyA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVBc1Jhd0JpdHMoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNp
dG9yLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KICAgICAgICAgYm9vbCBjYWxs
ZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNWTUVudHJ5RnJhbWU7
IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGVyRnJhbWU7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxlZTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGVlOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2s7IH0KICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lKCkgY29uc3QgewpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAgICAg
Vk1FbnRyeUZyYW1lKiBtX1ZNRW50cnlGcmFtZTsKICAgICAgICAgVk1FbnRyeUZyYW1lKiBtX0Nh
bGxlclZNRW50cnlGcmFtZTsKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1lOwotICAg
ICAgICBKU0NlbGwqIG1fY2FsbGVlOworICAgICAgICBDYWxsZWVCaXRzIG1fY2FsbGVlOwogICAg
ICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAg
ICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMTQ0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwMSwyNCArMzAxLDI0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpq
aXRBc3NlcnRBcmd1bWVudEMKIAogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAotdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6aml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJiB2bSkKIHsKICAgICBK
dW1wIG5vRXhjZXB0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbm9FeGNlcHRpb24gPSBi
cmFuY2hUZXN0NjQoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlv
bigpKSk7CisgICAgbm9FeGNlcHRpb24gPSBicmFuY2hUZXN0NjQoWmVybywgQWJzb2x1dGVBZGRy
ZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIG5vRXhjZXB0aW9uID0gYnJhbmNoMzIoRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5h
ZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbm9FeGNlcHRpb24g
PSBicmFuY2gzMihFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigp
KSwgVHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAgIGFib3J0V2l0aFJlYXNvbihKSVRVbmNv
dWdodEV4Y2VwdGlvbkFmdGVyQ2FsbCk7CiAgICAgbm9FeGNlcHRpb24ubGluayh0aGlzKTsKIH0K
IAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KCkKK3ZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eihWTSYgdm0pCiB7CiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VFeGNlcHRpb25GdXp6KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVuY29kZWRKU1Zh
bHVlKiBidWZmZXIgPSB2bSgpLT5leGNlcHRpb25GdXp6aW5nQnVmZmVyKHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycykpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSB2bS5leGNlcHRpb25G
dXp6aW5nQnVmZmVyKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtMzU0LDIzICszNTQsMjMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIH0KIH0KIAotQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFz
c2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCitBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKFZNJiB2bSkKIHsKLSAgICBy
ZXR1cm4gZW1pdEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKKyAgICByZXR1
cm4gZW1pdEV4Y2VwdGlvbkNoZWNrKHZtLCBOb3JtYWxFeGNlcHRpb25DaGVjayk7CiB9CiAKLUFz
c2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhF
eGNlcHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQorQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKFZNJiB2
bSwgRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsK
LSAgICBjYWxsRXhjZXB0aW9uRnV6eigpOworICAgIGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKIAog
ICAgIGlmICh3aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAgICAgICAgIGtpbmQgPSAoa2luZCA9PSBO
b3JtYWxFeGNlcHRpb25DaGVjayA/IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNl
cHRpb25DaGVjayk7CiAgICAgCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/
IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0aW9u
KCkpKTsKKyAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25D
aGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mRXhjZXB0
aW9uKCkpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJhbmNoMzIo
a2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRl
QWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRydXN0ZWRJbW0zMigwKSk7Cisg
ICAgcmVzdWx0ID0gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVx
dWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSksIFRy
dXN0ZWRJbW0zMigwKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVt
cFdpZHRoKQpAQCAtMzgyLDE1ICszODIsMTUgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2Vt
Ymx5SGVscGVyczo6ZQogICAgIHJldHVybiByZWFsSnVtcC5tX2p1bXA7CiB9CiAKLUFzc2VtYmx5
SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25D
aGVjaygpCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uUGF0
Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mIHZtKQogewotICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7
CisgICAgY2FsbEV4Y2VwdGlvbkZ1enoodm0pOwogCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICByZXN1bHQgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgQWJzb2x1dGVB
ZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgcmVzdWx0ID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkp
OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZElt
bTMyKDApKTsKKyAgICByZXN1bHQgPSBicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KHZtLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKICNlbmRpZgogICAg
IAogICAgIHJldHVybiByZXN1bHQ7CkBAIC00NDksMTIgKzQ0OSwxMiBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKLXZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShSZWdpc3RlcklEIHNvdXJjZSwgUmVn
aXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBk
ZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBU1NF
UlQoZGVzdCAhPSBzY3JhdGNoKTsKICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c291cmNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKLSAgICBsb2FkUHRy
KHZtKCktPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmJhc2UoKSwgc2NyYXRjaCk7CisgICAgbG9h
ZFB0cih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCksIHNjcmF0Y2gpOwogICAgIGxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBkZXN0LCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCksIGRlc3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aCk7CkBAIC01NDksMTAgKzU0OSwxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKEpTCiAgICAgZW1pdFJhbmRvbVRodW5rSW1wbCgqdGhpcywgc2NyYXRjaDAsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgcmVzdWx0LCBsb2FkRnJvbUhpZ2gsIHN0b3JlVG9IaWdoLCBsb2FkRnJv
bUxvdywgc3RvcmVUb0xvdyk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9t
VGh1bmsoR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwg
R1BSUmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRSYW5kb21UaHVuayhWTSYgdm0sIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCkKIHsKICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHNjcmF0
Y2gzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoMywgc2NyYXRjaDMsIHNjcmF0Y2gw
KTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaDMsIHNjcmF0Y2gzLCBzY3JhdGNo
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gzLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgc2NyYXRjaDMpOwogICAgIC8vIE5vdywgc2NyYXRjaDMgaG9sZHMgSlNHbG9i
YWxPYmplY3QqLgogCkBAIC01NzMsMTAgKzU3MywxMCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFJhbmRvbVRodW5rKEdQCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJl
c3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKFZNJiB2bSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBtX3Zt
LT5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIGFsbENhbGxlZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0
cygpOwogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxl
ZVNhdmVzLT5zaXplKCk7CiAKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6cmVzdG9yZUNhbGxlZVNhdmVzCiAgICAgfQogICAgIEFTU0VSVChzY3JhdGNoICE9IEludmFs
aWRHUFJSZWcpOwogCi0gICAgbG9hZFB0cigmbV92bS0+dG9wVk1FbnRyeUZyYW1lLCBzY3JhdGNo
KTsKKyAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHNjcmF0Y2gpOwogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zm
c2V0KCkpLCBzY3JhdGNoKTsKIAogICAgIC8vIFJlc3RvcmUgYWxsIGNhbGxlZSBzYXZlcyBleGNl
cHQgZm9yIHRoZSBzY3JhdGNoLgpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjp3YW5nc0ludDY0SGFzaChHUFIKIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12
b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbihKU1ZhbHVlUmVn
cyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFzRlBS
LCBGUFJSZWcgdGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQordm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mIHZtLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyB2YWx1ZUFz
RlBSLCBGUFJSZWcgdGVtcEZQUiwgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgbmVnYXRlUmVzdWx0KQogewog
ICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgc3RydWN0dXJlOgog
ICAgIC8vIGlmICh2YWx1ZSBpcyBib29sZWFuKSB7CkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRDb252ZXJ0VmFsdWVUbwogICAgICAgICBBU1NFUlQoc2NyYXRj
aCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgSnVtcExpc3QgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkp
OwotICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2YWx1ZS5wYXlsb2FkR1BSKCksIHJlc3VsdCwg
c2NyYXRjaCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZS5wYXlsb2FkR1BS
KCksIHJlc3VsdCwgc2NyYXRjaCk7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QpLCBzY3JhdGNoKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFw
cGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaCkpOwogICAgICAgICAvLyBXZSBhY3QgbGlrZSB3ZSBh
cmUgInVuZGVmaW5lZCIgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOCBA
QCB0eXBlZGVmIHZvaWQgKCpWX0RlYnVnT3BlcmF0aW9uX0VQUCkoRXhlCiAKIGNsYXNzIEFzc2Vt
Ymx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiBwdWJsaWM6Ci0gICAgQXNzZW1i
bHlIZWxwZXJzKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV92bSh2
bSkKLSAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgQXNzZW1ibHlIZWxwZXJz
KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAgICAgLCBtX2Jhc2VsaW5lQ29kZUJsb2NrKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YmFz
ZWxpbmVBbHRlcm5hdGl2ZSgpIDogMCkKICAgICB7CiAgICAgICAgIGlmIChtX2NvZGVCbG9jaykg
ewpAQCAtNjIsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1f
dm07IH0KICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1i
bGVyOyB9CiAKICAgICB2b2lkIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCkKQEAgLTMzNSwx
NSArMzMzLDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgY29weUNhbGxl
ZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1wUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEg
PSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7CiAKLSAgICAgICAgbG9hZFB0cigmbV92bS0+
dG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7CisgICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlG
cmFtZSwgdGVtcDEpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOwogCi0gICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IG1fdm0tPmdldEFsbENhbGxlZVNh
dmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENh
bGxlZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgICAg
ICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpOwogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMt
PnNpemUoKTsKICAgICAgICAgCkBAIC0zNjEsOSArMzU5LDkgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihWTSYpOwogCi0gICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNGcm9t
RnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb25zdCBUZW1w
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSB9KQorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtLCBjb25zdCBUZW1wUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSB9KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDAp
OwpAQCAtMzc0LDEwICszNzIsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
KCkpOwogCiAgICAgICAgIC8vIENvcHkgc2F2ZWQgY2FsbGVlU2F2ZXMgb24gc3RhY2sgb3IgdW5z
YXZlZCBjYWxsZWVTYXZlcyBpbiByZWdpc3RlciB0byB2bSBjYWxsZWVTYXZlIGJ1ZmZlcgotICAg
ICAgICBsb2FkUHRyKCZtX3ZtLT50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKKyAgICAgICAgbG9h
ZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7CiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0
ZW1wMSk7CiAKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0g
bV92bS0+Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVl
U2F2ZXMgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgICAgICBSZWdp
c3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygp
OwogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUo
KTsKQEAgLTk3Myw2MiArOTcxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gR1BSSW5mbzo6
cmVnVDU7CiAgICAgfQogCi0gICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBu
byBlZmZlY3Qgb24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgotICAgIHZvaWQgZGVidWdDYWxs
KFZfRGVidWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKLSAgICB7Ci0g
ICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyk7Ci0g
ICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX3ZtLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgc3RvcmU2NChH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKLSNlbHNlCi0gICAgICAgICAgICBz
dG9yZTMyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOwotI2VuZGlmCi0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZl
ciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVj
aCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0KLSNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUo
QVJNNjQpIHx8IENQVShNSVBTKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZ3Vt
ZW50KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2ggPSBzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotI2VsaWYgQ1BVKFg4NikKLSAg
ICAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgMCk7Ci0gICAgICAgIHBva2Uo
VHJ1c3RlZEltbVB0cihhcmd1bWVudCksIDEpOwotICAgICAgICBwb2tlKFRydXN0ZWRJbW1QdHIo
YnVmZmVyKSwgMik7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDA7Ci0j
ZWxzZQotI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKLSNlbmRp
ZgotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVu
Y3Rpb24pKSwgc2NyYXRjaCk7Ci0gICAgICAgIGNhbGwoc2NyYXRjaCk7Ci0KLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZm
ZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBsb2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgbG9hZDMyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwot
I2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5l
cmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZyk7CkBAIC0x
MDUyLDcgKzk5NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRT
YW5lKCkgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9u
KCk7CisgICAgdm9pZCBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oVk0mKTsKIAogICAgIHZv
aWQgaW5jcmVtZW50U3VwZXJTYW1wbGVyQ291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudFN1cGVy
U2FtcGxlckNvdW50KCk7CkBAIC0xMTg5LDE0ICsxMTMxLDE0IEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CisgICAgdm9pZCBjYWxs
RXhjZXB0aW9uRnV6eihWTSYpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsg
Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKICAgICBlbnVt
IEV4Y2VwdGlvbkp1bXBXaWR0aCB7IE5vcm1hbEp1bXBXaWR0aCwgRmFySnVtcFdpZHRoIH07CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCi0gICAgICAgIEV4
Y2VwdGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25KdW1wV2lk
dGggPSBOb3JtYWxKdW1wV2lkdGgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdE5v
blBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgSnVtcCBlbWl0SnVtcElmRXhjZXB0aW9u
KCk7CisgICAgICAgIFZNJiwgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hl
Y2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSnVtcCBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soVk0mKTsKKyAgICBK
dW1wIGVtaXRKdW1wSWZFeGNlcHRpb24oVk0mKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VO
VEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJz
dHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKQEAg
LTEyNzksNyArMTIyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Q291bnQo
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGVtaXRM
b2FkU3RydWN0dXJlKFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVy
SUQgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lzdGVySUQg
c291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKICAgICB2b2lk
IGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwg
UmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEKQogICAgIHsKQEAgLTEzMTQsNDUgKzEyNTYsNDUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoOChBYm92ZSwgQWJzb2x1dGVBZGRyZXNz
KGFkZHJlc3MpLCBUcnVzdGVkSW1tMzIoYmxhY2tUaHJlc2hvbGQpKTsKICAgICB9CiAgICAgCi0g
ICAgSnVtcCBiYXJyaWVyQnJhbmNoKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaEdQUikKKyAg
ICBKdW1wIGJhcnJpZXJCcmFuY2goVk0mIHZtLCBHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2hH
UFIpCiAgICAgewogICAgICAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6Y2VsbFN0YXRl
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBz
Y3JhdGNoR1BSLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhy
ZXNob2xkKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSLCBB
YnNvbHV0ZUFkZHJlc3Modm0uaGVhcC5hZGRyZXNzT2ZCYXJyaWVyVGhyZXNob2xkKCkpKTsKICAg
ICB9CiAKLSAgICBKdW1wIGJhcnJpZXJCcmFuY2goSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRj
aEdQUikKKyAgICBKdW1wIGJhcnJpZXJCcmFuY2goVk0mIHZtLCBKU0NlbGwqIGNlbGwsIEdQUlJl
ZyBzY3JhdGNoR1BSKQogICAgIHsKICAgICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKTsKICAg
ICAgICAgbG9hZDgoYWRkcmVzcywgc2NyYXRjaEdQUik7Ci0gICAgICAgIHJldHVybiBicmFuY2gz
MihBYm92ZSwgc2NyYXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
QmFycmllclRocmVzaG9sZCgpKSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgc2Ny
YXRjaEdQUiwgQWJzb2x1dGVBZGRyZXNzKHZtLmhlYXAuYWRkcmVzc09mQmFycmllclRocmVzaG9s
ZCgpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmFycmllclN0b3JlTG9hZEZlbmNlKCkKKyAg
ICB2b2lkIGJhcnJpZXJTdG9yZUxvYWRGZW5jZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVycygpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CisgICAgICAg
IEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0pOwogICAgICAgICBtZW1v
cnlGZW5jZSgpOwogICAgICAgICBvay5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IG11dGF0b3JGZW5jZSgpCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEp1bXAgb2sg
PSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJ
Zk11dGF0b3JGZW5jZU5vdE5lZWRlZCh2bSk7CiAgICAgICAgIHN0b3JlRmVuY2UoKTsKICAgICAg
ICAgb2subGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdG9yZUJ1dHRlcmZseShH
UFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQorICAgIHZvaWQgc3RvcmVCdXR0ZXJmbHko
Vk0mIHZtLCBHUFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAg
aWYgKGlzWDg2KCkpIHsKICAgICAgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhv
YmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZl
bmNlTm90TmVlZGVkKCk7CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3RO
ZWVkZWQodm0pOwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRl
cmZseSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAg
ICAgICBzdG9yZUZlbmNlKCk7CkBAIC0xMzYyLDcgKzEzMDQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBudWtlU3RydWN0dXJlQW5k
U3RvcmVCdXR0ZXJmbHkoR1BSUmVnIGJ1dHRlcmZseSwgR1BSUmVnIG9iamVjdCkKKyAgICB2b2lk
IG51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShWTSYgdm0sIEdQUlJlZyBidXR0ZXJmbHks
IEdQUlJlZyBvYmplY3QpCiAgICAgewogICAgICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICAg
ICAgb3IzMihUcnVzdGVkSW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG51a2VkU3RydWN0dXJl
SURCaXQoKSkpLCBBZGRyZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CkBAIC0xMzcwLDcgKzEzMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3RO
ZWVkZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCh2
bSk7CiAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90PihudWtl
ZFN0cnVjdHVyZUlEQml0KCkpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSkpOwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1dHRl
cmZseSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAt
MTM4MSw5ICsxMzIzLDkgQEAgcHVibGljOgogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAg
fQogICAgIAotICAgIEp1bXAganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCkKKyAgICBKdW1w
IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZChWTSYgdm0pCiAgICAgewotICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09m
TXV0YXRvclNob3VsZEJlRmVuY2VkKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KFpl
cm8sIEFic29sdXRlQWRkcmVzcyh2bS5oZWFwLmFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNl
ZCgpKSk7CiAgICAgfQogICAgIAogICAgIC8vIEVtaXRzIHRoZSBicmFuY2ggc3RydWN0dXJlIGZv
ciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0IGZhbGwgdGhyb3VnaC4g
VGhlCkBAIC0xNDcxLDcgKzE0MTMsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIHZvaWQgZW1pdFJhbmRvbVRodW5rKEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnIHNjcmF0Y2gw
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgRlBSUmVnIHJlc3VsdCk7Ci0gICAg
dm9pZCBlbWl0UmFuZG9tVGh1bmsoR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KTsKKyAgICB2b2lk
IGVtaXRSYW5kb21UaHVuayhWTSYsIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCk7CiAjZW5kaWYK
IAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGluIGFs
bG9jYXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCkBAIC0xNTUxLDEwICsx
NDkzLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUs
IHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlPgogICAgIHZvaWQg
ZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplKAotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVn
IHNjcmF0Y2hHUFIxLAorICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEs
CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qg
c2l6ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPigqdm0oKSktPmFsbG9jYXRvckZvcihzaXplKTsKKyAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxs
b2NhdG9yRm9yKHNpemUpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTY0LDkg
KzE1MDYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENs
YXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGU+Ci0g
ICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBH
UFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNj
cmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwg
c3RvcmFnZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCwgQ2xhc3NUeXBlOjph
bGxvY2F0aW9uU2l6ZSgwKSk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3du
U2l6ZTxDbGFzc1R5cGU+KHZtLCByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZSwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCwgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgw
KSk7CiAgICAgfQogICAgIAogICAgIC8vIGFsbG9jYXRpb25TaXplIGNhbiBiZSBhbGlhc2VkIHdp
dGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRoZW4g
aXQKQEAgLTE1ODcsMjYgKzE1MjksMjYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9p
ZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1
cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQ
UjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1p
dEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1
Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRj
aEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAg
ICAgICAgU3Vic3BhY2UmIHN1YnNwYWNlID0gKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4oKnZtKCkp
OworICAgICAgICBTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2
bSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQocmVzdWx0R1BSLCBzdWJzcGFj
ZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwog
ICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRH
UFIsIHNjcmF0Y2hHUFIyKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5
cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJs
ZVNpemVkSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUs
IEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRj
aEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxl
U2l6ZWRKU09iamVjdChWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVn
IHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBlbWl0QWxs
b2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBh
bGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAg
ICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPENsYXNzVHlwZT4odm0sIHJlc3VsdEdQ
Uiwgc3RydWN0dXJlLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBz
bG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVz
dWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9CiAKLSAgICB2b2lk
IGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQ
UlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNH
bG9iYWxPYmplY3QqLCBib29sIG5lZ2F0ZVJlc3VsdCA9IGZhbHNlKTsKKyAgICB2b2lkIGVtaXRD
b252ZXJ0VmFsdWVUb0Jvb2xlYW4oVk0mLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBS
UmVnLCBGUFJSZWcsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0ds
b2JhbE9iamVjdCosIGJvb2wgbmVnYXRlUmVzdWx0ID0gZmFsc2UpOwogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZURlc3RydWN0aWJs
ZU9iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIHNj
cmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2
b2lkIGVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdChWTSYgdm0sIEdQUlJlZyByZXN1bHRH
UFIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Cisg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4odm0sIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2Ny
YXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0OjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgIH0KICAgICAKQEAgLTE2MzYsNyArMTU3OCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHdhbmdzSW50NjRIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3Vs
dCwgR1BSUmVnIHNjcmF0Y2gpOwogI2VuZGlmCiAKLSAgICB2b2lkIGxvYWRXYXNtQ29udGV4dChH
UFJSZWcgZHN0KQorICAgIHZvaWQgbG9hZFdhc21Db250ZXh0KFZNJiB2bSwgR1BSUmVnIGRzdCkK
ICAgICB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKICAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZVdlYkFzc2VtYmx5RmFzdFRMUygpKSB7CkBAIC0xNjQ1LDE3ICsxNTg3LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoaXMgc3RhdGUgZWxz
ZXdoZXJlIHRvIGFsbG93IFBJQy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTc3MwotICAgICAgICBsb2FkUHRyKCZtX3ZtLT53YXNtQ29udGV4dCwgZHN0KTsKKyAg
ICAgICAgbG9hZFB0cigmdm0ud2FzbUNvbnRleHQsIGRzdCk7CiAgICAgfQogCi0gICAgdm9pZCBz
dG9yZVdhc21Db250ZXh0KEdQUlJlZyBzcmMpCisgICAgdm9pZCBzdG9yZVdhc21Db250ZXh0KFZN
JiB2bSwgR1BSUmVnIHNyYykKICAgICB7CiAjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKICAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdFRMUygpKQogICAgICAgICAgICAgcmV0
dXJuIHN0b3JlVG9UTFNQdHIoc3JjLCBmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9XQVNNX0NPTlRF
WFRfS0VZKSk7CiAjZW5kaWYKICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhpcyBzdGF0ZSBlbHNl
d2hlcmUgdG8gYWxsb3cgUElDLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY5NzczCi0gICAgICAgIHN0b3JlUHRyKHNyYywgJm1fdm0tPndhc21Db250ZXh0KTsKKyAg
ICAgICAgc3RvcmVQdHIoc3JjLCAmdm0ud2FzbUNvbnRleHQpOwogICAgIH0KIAogICAgIHN0YXRp
YyBib29sIGxvYWRXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKQpAQCAtMTY3
Nyw3ICsxNjE5LDYgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFZNKiBtX3Zt
OwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5l
Q29kZUJsb2NrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCB2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQCiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCit2b2lkIEND
YWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewog
ICAgIEFTU0VSVCghUmVnaXN0ZXJTZXQ6OmFyZ3VtZW50R1BSUygpLmdldChzY3JhdGNoMU5vbkFy
Z0dQUikpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpLT5zaGFkb3dDaGlja2VuKCkuYWRk
cmVzc09mTG9nQ3Vyc29yKCkpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSksIHNjcmF0Y2gx
Tm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpLCBzaGFk
b3dQYWNrZXQpOwotICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoQmVsb3csIHNoYWRvd1BhY2tldCwg
VHJ1c3RlZEltbVB0cih2bSgpLT5zaGFkb3dDaGlja2VuKCkubG9nRW5kKCkpKTsKKyAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0uc2hh
ZG93Q2hpY2tlbigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25Qcm9j
ZXNzU2hhZG93Q2hpY2tlbkxvZykpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CiAgICAgY2FsbChzY3Jh
dGNoMU5vbkFyZ0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHZtKCktPnNoYWRvd0NoaWNr
ZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwg
c2NyYXRjaDFOb25BcmdHUFIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQ
UiksIHNoYWRvd1BhY2tldCk7CiAgICAgb2subGluayh0aGlzKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHNpemVvZihTaGFkb3dDaGlja2VuOjpQYWNrZXQpKSwgc2hhZG93UGFja2V0LCBzY3Jh
dGNoMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGljOgotICAg
IENDYWxsSGVscGVycyhWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrID0gMCkKLSAgICAgICAg
OiBBc3NlbWJseUhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICBDQ2FsbEhlbHBlcnMoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSAwKQorICAgICAgICA6IEFzc2VtYmx5SGVscGVycyhjb2RlQmxvY2sp
CiAgICAgewogICAgIH0KICAgICAKQEAgLTI0NDAsMTEgKzI0NDAsMTEgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogICAgIAotICAgIHZvaWQganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpCisgICAg
dm9pZCBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKFZNJiB2bSkKICAgICB7CiAgICAgICAgIC8vIGdl
bmVyaWNVbndpbmQoKSBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB2bS0+Y2FsbEZy
YW1lRm9yQ2F0Y2gsCiAgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFuZGxlciBp
biB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cuCi0gICAgICAgIGxvYWRQdHIoJnZtKCktPnRh
cmdldE1hY2hpbmVQQ0ZvclRocm93LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGxvYWRQdHIo
JnZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIGp1
bXAoR1BSSW5mbzo6cmVnVDEpOwogICAgIH0KIApAQCAtMjY0MCw3ICsyNjQwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKICAgICB2b2lkIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOwogICAgIC8vIExl
YXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGlu
IHNoYWRvd1BhY2tldC4KLSAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
OworICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCkKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwg
VHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgp
KSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRl
cigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CiAKLSAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigp
OworICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0
aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwpAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICBpZiAoIW1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRp
b25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIAotICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogCiAg
ICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgaXMgcGFzc2Vk
IHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KIApA
QCAtODg1LDE0ICs4ODUsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFu
ZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZy
b21DYWxsZXJGcmFtZSkudmFsdWUoKSkpOwotICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogICAgIH0KIAogICAg
IGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSB8fCBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LnNpemUoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAg
ICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CiAKICAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFu
ZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
dm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC05MDQsNyArOTA0LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKICAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rp
b25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlcikudmFsdWUoKSkpOwotICAgICAgICBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMTQ0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTQsMTIgKzI5NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGV4Y2Vw
dGlvbkNoZWNrKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBw
ZW5kKGVtaXRFeGNlcHRpb25DaGVjaygpKTsKKyAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2soKnZtKCkpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgZXhjZXB0aW9uQ2hlY2tXaXRoQ2FsbEZyYW1lUm9sbGJhY2soKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQo
ZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRo
Q2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjaygqdm0oKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIxNDQy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZW5lcmF0ZU91dE9mTGlu
ZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0ciBjYWxsUmVwbGFjZW1l
bnQpCiAgICAgewogICAgICAgICBhdXRvIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0ID0gWyZd
ICgpIHsKLSAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgICAgICAgICAgYXV0byBq
dW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xl
ZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBv
ZiBhbiBJQy4KICAgICAgICAgICAgIGJvb2wgbmVlZHNCcmFuY2hDb21wYWN0aW9uID0gZmFsc2U7
CkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChtX2dlbmVyYXRlRmFz
dFBhdGhPblJlcGF0Y2gpIHsKIAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNv
ZGVCbG9jayk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAg
ICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUgZ2VuZXJhdGlvblN0YXRlOwogICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmUgPSBnZW5lcmF0ZUlubGluZShqaXQsIGdlbmVyYXRpb25T
dGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJlcGxhY2VDYWxsKCk7CiAKICAgICAgICAgewotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0
KGNvZGVCbG9jayk7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbmRK
dW1wTGlzdDsgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGhK
dW1wTGlzdDsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBK
SVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMig4KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAK
ICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsg
dXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsK
QEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0
aW9uCiAgICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVz
dGVkSW1tUHRyKDApLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KCp2bSgpLCByZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hSZWcsIHNsb3dDYXNl
cyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIGVt
aXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsK
QEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24q
IGN1CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKICAgICBHUFJSZWcgcmVzdWx0ID0gcmVn
VDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4odmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZt
KCksIHZhbHVlLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKIAog
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CkBAIC00
NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cgog
ICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gg
PSByZWdUMjsKICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7Ci0gICAgZW1pdENvbnZlcnRWYWx1
ZVRvQm9vbGVhbih2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgdmFsdWUsIHJlc3VsdCwg
c2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKIH0KQEAgLTc2MCwxMCArNzYwLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiAKIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJU
KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0oKSk7CiAgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKLSAgICBqdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1c2hfd2l0aF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtODIxLDcgKzgyMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19z
dHJpbmcoSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fdm0pLCByZWdUMyk7CiAgICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZy
YW1lIGZvciB0aGUgaGFuZGxlci4KQEAgLTgzMiw3ICs4MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2Zp
bGVyKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGlu
ayh0aGlzKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwpAQCAtOTc3
LDcgKzk3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAg
ICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CiAKICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBudWxscHRyLCBhbGxv
Y2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdCgqdm0oKSwgcmVzdWx0UmVnLCBudWxs
cHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRT
dG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0K
QEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm8KICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7CiAg
ICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qz
KTsKQEAgLTEzMjgsNyArMTMyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWkKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVn
IHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50
IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJS
ZWcpOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMik7CiAgICAgZW1pdExvYWRUYWcoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NyArMTYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbgogCiAg
ICAgLy8gTG9hZCB0aGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QgaW4gcmVnVDIuICBJZiB0aGlz
IGlzIGVxdWFsIHRvIHJlZ1QxIC0gV0lOIQogICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYgd2Un
dmUgaGl0IG51bGwgLSBpZiB3ZSBoYXZlIHRoZW4gZHJvcCBvdXQgb2YgdGhlIGxvb3AsIGlmIG5v
dCBnbyBhZ2Fpbi4KLSAgICBlbWl0TG9hZFN0cnVjdHVyZShyZWdUMiwgcmVnVDIsIHJlZ1QzKTsK
KyAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDIsIHJlZ1QyLCByZWdUMyk7CiAgICAg
bG9hZDY0KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgSnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMiwgcmVnVDEp
OwogICAgIGVtaXRKdW1wSWZKU0NlbGwocmVnVDIpLmxpbmtUbyhsb29wLCB0aGlzKTsKQEAgLTIx
MCw3ICsyMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3RpCiAg
ICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUocmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDApOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2pmYWxzZShJbnN0cnVjdGlvbiogY3UKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9C
b29sZWFuKEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsK
IAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7CiB9CkBA
IC0zNjYsNyArMzY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24q
IAogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
IGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CkBAIC0zODksNyArMzg5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKgogCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCByZWdU
MiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICBHUFJSZWcgc2NyYXRjaCA9
IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHZhbHVlKTsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKEpTVmFsdWVSZWdz
KHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1
bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXN1bHQpLCB0YXJnZXQpOwogfQogCkBAIC00NTEsMTAgKzQ1MSwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFT
U0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtKCkpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7Ci0gICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcigpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXNoX3dpdGhfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19z
dHJpbmcoSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSgpKTsKIAogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTU0MCw3ICs1NDAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAKICAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNh
dGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9u
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7CisgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgaXND
YXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X3ZtKSwgcmVnVDMpOwpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoSW5zdHJ1Y3Rpb24qIGMKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZShyZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0
cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC02NzIsNyArNjcy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIAogICAgIEp1bXAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTkxOCw3ICs5MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KEluc3RydWN0CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgICAgIGNvcHlDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCp2bSgpKTsKIAogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXpl
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgR1BSUmVnIHNoYWRv
d1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICBlbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KQEAgLTEzNzksNyArMTM3OSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBHUFJSZWcgc2hh
ZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BS
MDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBz
Y3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMTQ0
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIodW5zaWduZWQgb3duZQogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnTWFza1JlZ2lzdGVyKTsKIAotICAgIEp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2gocmVnVDAsIHJlZ1Qx
KTsKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2
bSgpLCByZWdUMCwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsIHJlZ1QwKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CiAKQEAgLTEyNTUsNyArMTI1NSw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KHVuc2lnbmVkIG93bmUKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAK
LSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHJlZ1Qx
LCByZWdUMik7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJy
YW5jaCgqdm0oKSwgcmVnVDEsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoLCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOwogCkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIpCiB7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaChvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
biA9IGJhcnJpZXJCcmFuY2goKnZtKCksIG93bmVyLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgb3duZXIpOwogICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pTSW50ZXJmYWNlSklULmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1Ymxp
YyBDQ2FsbEhlbHBlcnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CiAgICAgcHVi
bGljOgogICAgICAgICBKU0ludGVyZmFjZUpJVChWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMCkKLSAgICAgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCBjb2RlQmxvY2spCisgICAgICAg
ICAgICA6IENDYWxsSGVscGVycyhjb2RlQmxvY2spCisgICAgICAgICAgICAsIG1fdm0odm0pCiAg
ICAgICAgIHsKICAgICAgICAgfQogCkBAIC03Nyw2ICs3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW5saW5lIEFkZHJlc3MgaW50UGF5bG9hZEZvcihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaW5saW5lIEFkZHJlc3MgaW50
VGFnRm9yKGludCBpbmRleCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgICAgICBpbmxpbmUgQWRkcmVzcyBhZGRyZXNzRm9yKGludCBpbmRleCwgUmVnaXN0ZXJJRCBi
YXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KKworICAgICAgICBWTSogbV92bTsKICAgICB9OwogCiAgICAgc3RydWN0IFRo
dW5rSGVscGVycyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09
IGJhc2VWYWx1ZQogICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlVmFsdWUpKSkgewogCi0g
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZUFycmF5TGVuZ3RoKCpjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZvLCBqc0Nhc3Q8SlNB
cnJheSo+KGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0QXJyYXlMZW5ndGgoKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0
RnJvbVByb3h5KSB7CiAKLSAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoKmNvZGVCbG9jay0+dm0oKSwg
c3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkdldEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIHBy
b3BlcnR5TmFtZSkpOwogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTMzMCw3
ICszMzAsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNs
YXNzSW5mb09yTnVsbCh2bSksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcChleGVjLT52bSgpLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKICAgICB9CiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7CkBAIC0zOTcsNyArMzk3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVy
cmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2Uodm0sIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICAgICAgICAgICAg
ICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1Bh
dGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKIAotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAodm0s
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIElu
bGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwo
cmVzdWx0LmNvZGUoKSkpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdp
dmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKQEAgLTk5NCw3ICs5
OTQsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiB2b2lkIHJlc2V0R2V0QnlJRChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUlES2lu
ZCBraW5kKQogewogICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRG
dW5jdGlvbihraW5kKSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKCpjb2Rl
QmxvY2stPnZtKCksIHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7
CisgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xMDEzLDcgKzEw
MTMsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAgICAgfQog
CiAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1Bh
dGhDYWxsTG9jYXRpb24oKSwgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcCgqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3R1YkluZm8uc2xv
d1BhdGhTdGFydExvY2F0aW9uKCkpOworICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cChzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lk
IHJlc2V0SW4oQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRU
aHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGxvYWRBcmd1bWVudFdpdGhTcGVjaWZpY0NsYXNzKGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvLCBpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklE
IHNjcmF0Y2gpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvYWRDZWxsQXJndW1lbnQoYXJndW1l
bnQsIGRzdCk7Ci0gICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZShkc3QsIHNjcmF0Y2gsIGRz
dCk7CisgICAgICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgZHN0LCBzY3JhdGNoLCBk
c3QpOwogICAgICAgICAgICAgYXBwZW5kRmFpbHVyZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
Y2xhc3NJbmZvKSkpOwogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZWxvYWQgdGhlIGFyZ3Vt
ZW50IHNpbmNlIGVtaXRMb2FkU3RydWN0dXJlIGNsb2JiZXJlZCBpdC4KICAgICAgICAgICAgIGxv
YWRDZWxsQXJndW1lbnQoYXJndW1lbnQsIGRzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDE5ICs2NCwxOSBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0Nh
bGxICiAvLyBsaW5raW5nIGhlbHBlciAoQysrIGNvZGUpIGRlY2lkZXMgdG8gdGhyb3cgYW4gZXhj
ZXB0aW9uIGluc3RlYWQuCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIC8vIFRoZSBjYWxsIHB1c2hlZCBh
IHJldHVybiBhZGRyZXNzLCBzbyB3ZSBuZWVkIHRvIHBvcCBpdCBiYWNrIG9mZiB0byByZS1hbGln
biB0aGUgc3RhY2ssCiAgICAgLy8gZXZlbiB0aG91Z2ggd2Ugd29uJ3QgdXNlIGl0LgogICAgIGpp
dC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSKTsKIAotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIoKnZtKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
bG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigp
OworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBw
YXRoIHRodW5rIikpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRodW5rR2VuZXIKICAgICAvLyB0byBwZXJmb3JtIGxpbmtpbmcgYW5kIGxhenkgY29t
cGlsYXRpb24gaWYgbmVjZXNzYXJ5LiBXZSBleHBlY3QgdGhlIGNhbGxlZQogICAgIC8vIHRvIGJl
IGluIHJlZ1QwL3JlZ1QxIChwYXlsb2FkL3RhZyksIHRoZSBDYWxsRnJhbWUgdG8gaGF2ZSBhbHJl
YWR5CiAgICAgLy8gYmVlbiBhZGp1c3RlZCwgYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUg
YXZhaWxhYmxlIGZvciB1c2UuCi0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKICAgICAKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5r
Q2FsbCk7CiAgICAgCkBAIC0xNTEsNyArMTUxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDYWxsVGh1bmtHZW5lcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2lu
ZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9s
eW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIENDYWxsSGVscGVycyBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0
LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCk7CiAgICAgCkBAIC0xNzAsNyArMTcw
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIC8vIGp1
bXAgdG8gdGhlIGNhbGxlZSwgb3Igc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwg
ZnJhbWUgd2hpbGUgd2UKICAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFw
cHJvcHJpYXRlIEpJVCBvcGVyYXRpb24uCiAKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2U7CiAgICAgCkBAIC0zNTksNyArMzU5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZQogICAgIC8vIEhhbmRsZSBhbiBleGNlcHRpb24KICAgICBleGNlcHRp
b25IYW5kbGVyLmxpbmsoJmppdCk7CiAKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCp2bSk7CiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJm
YWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BV
KFg4NikgJiYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcigpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIm5hdGl2ZSAlcyVzIHRyYW1wb2xpbmUi
LCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGggU2F2
ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgPyAi
VGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKSk7
CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmFuZG9tVGh1bmtH
ZW5lcmF0CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZih2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaml0LmVtaXRSYW5kb21UaHVuayhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMCk7CisgICAgaml0LmVtaXRSYW5kb21UaHVuaygqdm0sIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QwKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwogCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgInJhbmRvbSIpOwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHJhbmRvbVRodW5rR2VuZXJhdAogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBDQ2Fs
bEhlbHBlcnMgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIApAQCAtMTEzNywxOSArMTEzNywxOSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dl
bmVyYXRvcihWTSogdm0pCiB7Ci0gICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3Zl
IEV4Y2VwdGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGFuZCBqdW1wIGhlcmUuCiAgICAg
Ly8gV2UncmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZSwgYnV0IG5vdCBjYWxs
ZWUgc2F2ZXMuCiAgICAgewogICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwogICAgICAgICB1c2VkUmVnaXN0
ZXJzLnNldChHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZt
LCB1c2VkUmVnaXN0ZXJzKTsKICAgICB9CiAKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
KyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgdm9pZCAoKnRocm93
V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhl
Y1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpIHsKICAgICAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwxNSArMjk1LDQgQEAgSlNWYWx1ZSBK
U0NlbGw6OmdldFByb3RvdHlwZShKU09iamVjdCosIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLWJvb2wgSlNDZWxsOjppc0FueVdhc21DYWxsZWUoVk0mIHZtKSBjb25z
dAotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICByZXR1cm4gaW5oZXJpdHModm0sIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmluZm8oKSkgfHwgaW5oZXJpdHModm0sIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZTo6aW5mbygpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDcgKzEwMSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9v
bCBpc1N5bWJvbCgpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKLSAgICBib29s
IGlzQW55V2FzbUNhbGxlZShWTSYpIGNvbnN0OwogICAgIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBj
b25zdDsKICAgICBib29sIGlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBp
c1Byb3h5KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2
LDEyIEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW4KIAogQUxXQVlT
X0lOTElORSBWTSYgRXhlY1N0YXRlOjp2bSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxlZSgp
KTsKLSAgICBBU1NFUlQoY2FsbGVlKCktPnZtKCkpOwotICAgIEFTU0VSVCghY2FsbGVlKCktPmlz
TGFyZ2VBbGxvY2F0aW9uKCkpOworICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCku
YXNDZWxsKCk7CisgICAgQVNTRVJUKGNhbGxlZSk7CisgICAgQVNTRVJUKGNhbGxlZS0+dm0oKSk7
CisgICAgQVNTRVJUKCFjYWxsZWUtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwogICAgIC8vIFRoaXMg
aXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBzaW5jZSB3ZSBhY2Nlc3MgdGhpcyBzbyBvZnRl
bi4KLSAgICByZXR1cm4gKmNhbGxlZSgpLT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJu
ICpjYWxsZWUtPm1hcmtlZEJsb2NrKCkudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsMTAgQEAgcHVibGlj
OgogCiAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNh
bGxlZSgpOworICAgICAgICBpZiAoIXZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBj
YWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKTsKICAgICAgICAgaWYgKGNhbGxlZSAh
PSBtX3RhcmdldENhbGxlZSkKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRp
bnVlOwogCkBAIC0yNzksNyArMjgyLDEwIEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRvcjo6
U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsKLSAg
ICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCF2
aXNpdG9yLT5jYWxsZWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVl
KCkuYXNDZWxsKCk7CiAKICAgICAgICAgaWYgKGNhbGxlZSAmJiBjYWxsZWUtPmluaGVyaXRzKCpj
YWxsZWUtPnZtKCksIEpTQm91bmRGdW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDYgQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlQ29tcGls
YXRpb24sIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VGVExD
b21waWxhdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgbG9nQ29t
cGlsYXRpb25DaGFuZ2VzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdihib29sLCBw
cmludEVhY2hPU1JFeGl0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2
YWxpZGF0ZUdyYXBoLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB2YWxp
ZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJv
b2wsIHZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHJl
dmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBpbnRwdHJfdCBTdGFja0Zy
YW1lOjpzb3VyY2VJRCgpIGNvbnN0CiAKIFN0cmluZyBTdGFja0ZyYW1lOjpzb3VyY2VVUkwoKSBj
b25zdAogeworICAgIGlmIChtX2lzV2FzbUZyYW1lKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJbd2FzbSBjb2RlXSIpOworCiAgICAgaWYgKCFtX2NvZGVCbG9jaykgewotICAgICAgICBp
ZiAobV9jYWxsZWUgJiYgbV9jYWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW3dhc20gY29kZV0iKTsKICAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW25hdGl2ZSBjb2RlXSIpOwogICAgIH0KIApAQCAtNTYs
NiArNTcsOSBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6c291cmNlVVJMKCkgY29uc3QKIAogU3RyaW5n
IFN0YWNrRnJhbWU6OmZ1bmN0aW9uTmFtZShWTSYgdm0pIGNvbnN0CiB7CisgICAgaWYgKG1faXNX
YXNtRnJhbWUpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIjx3YXNtPiIpOworCiAgICAg
aWYgKG1fY29kZUJsb2NrKSB7CiAgICAgICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkpIHsKICAgICAgICAgY2FzZSBFdmFsQ29kZToKQEAgLTcwLDEyICs3NCwxMSBAQCBTdHJpbmcg
U3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkgCiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KKwogICAgIFN0cmluZyBuYW1lOwogICAgIGlm
IChtX2NhbGxlZSkgewogICAgICAgICBpZiAobV9jYWxsZWUtPmlzT2JqZWN0KCkpCiAgICAgICAg
ICAgICBuYW1lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKHZtLCBqc0Nhc3Q8SlNPYmplY3Qq
PihtX2NhbGxlZS5nZXQoKSkpLmltcGwoKTsKLSAgICAgICAgZWxzZSBpZiAobV9jYWxsZWUtPmlz
QW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQotICAgICAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiPHdhc20+Iik7CiAgICAgfQogICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IG5hbWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RhY2tGcmFtZS5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAg
Y2xhc3MgSlNPYmplY3Q7CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgorICAgIFN0YWNr
RnJhbWUoKSA9IGRlZmF1bHQ7CisKICAgICBTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBjYWxs
ZWUpCiAgICAgICAgIDogbV9jYWxsZWUodm0sIGNhbGxlZSkKICAgICB7IH0KQEAgLTQ1LDYgKzQ3
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KQogICAgIHsgfQogCisgICAgc3RhdGljIFN0YWNrRnJhbWUgd2FzbSgpCisgICAgeworICAgICAg
ICBTdGFja0ZyYW1lIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faXNXYXNtRnJhbWUgPSB0cnVl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgaGFzTGluZUFuZENv
bHVtbkluZm8oKSBjb25zdCB7IHJldHVybiAhIW1fY29kZUJsb2NrOyB9CiAgICAgCiAgICAgdm9p
ZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikg
Y29uc3Q7CkBAIC02NSw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgU3Ryb25nPEpTQ2VsbD4gbV9j
YWxsZWUgeyB9OwogICAgIFN0cm9uZzxDb2RlQmxvY2s+IG1fY29kZUJsb2NrIHsgfTsKICAgICB1
bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0IHsgVUlOVF9NQVggfTsKLSAgICAKKyAgICBib29sIG1f
aXNXYXNtRnJhbWUgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0s
IEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBCYWc8Q2FsbExpbmtJbmZvPiYmIGNhbGxMaW5r
SW5mb3MsIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiYmIGV4aXRTdHVicywgV2FzbTo6TWVt
b3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICB7Ci0gICAgICAgIGF1dG8q
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50KSkpIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sodm0sIG93bmVyLCBzdGQ6OmZvcndhcmQ8QmFnPENhbGxMaW5rSW5mbz4+KGNhbGxM
aW5rSW5mb3MpLCBzdGQ6OmZvcndhcmQ8VmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+PihleGl0
U3R1YnMpLCBtb2RlLCBjYWxsZWVDb3VudCk7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXApKSBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgc3RkOjpmb3J3YXJkPEJhZzxDYWxsTGlu
a0luZm8+PihjYWxsTGlua0luZm9zKSwgc3RkOjpmb3J3YXJkPFZlY3RvcjxXYXNtOjpXYXNtRXhp
dFN0dWJzPj4oZXhpdFN0dWJzKSwgbW9kZSwgY2FsbGVlQ291bnQpOwogICAgICAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC02
MSwzNyArNjEsMzIgQEAgcHVibGljOgogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlLmdldCgpOyB9CiAgICAgYm9vbCBpc1NhZmVUb1J1bihK
U1dlYkFzc2VtYmx5TWVtb3J5Kik7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2Nh
bGxlZUluZGV4XS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlc1tjYWxsZWVJbmRleF07
CiAgICAgfQogCi0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBS
ZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgp
KTsKICAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBm
dW5jdGlvbkltcG9ydENvdW50KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4
IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXgg
KyBtX2NhbGxlZUNvdW50XS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlc1tjYWxsZWVJ
bmRleCArIG1fY2FsbGVlQ291bnRdOwogICAgIH0KIAotICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50
Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGNhbGxlZSkKKyAgICB2b2lkIHNldEpTRW50cnlwb2ludENhbGxlZSh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgUmVmUHRyPFdlYkFzc2VtYmx5Q2FsbGVlPiYmIGNhbGxlZSkKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNh
bGxlZXMoKVtjYWxsZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgICAgICBtX2Nh
bGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92ZShjYWxsZWUpOwogICAgIH0KIAotICAgIHZvaWQg
c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNX
ZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxs
ZWUodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4mJiBjYWxsZWUp
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291
bnQpOwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQo
dm0sIHRoaXMsIGNhbGxlZSk7Ci0gICAgfQotCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KiBjYWxsZWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKKyAgICAgICAgbV9jYWxsZWVzW2NhbGxlZUluZGV4
ICsgbV9jYWxsZWVDb3VudF0gPSBXVEZNb3ZlKGNhbGxlZSk7CiAgICAgfQogCiAgICAgdm9pZCog
d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKQEAgLTEwMSwy
MiArOTYsMTMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKwogICAgIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2soVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgQmFnPENhbGxMaW5rSW5mbz4m
JiwgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+JiYsIFdhc206Ok1lbW9yeU1vZGUsIHVuc2ln
bmVkIGNhbGxlZUNvdW50KTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCi0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhbGxlZXMoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIG51
bUNhbGxlZXMpCi0gICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVzKCkgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIG51bUNhbGxlZXMgKiAyOwot
ICAgIH0KLQogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgOiBwdWJsaWMgSlNDOjpV
bmNvbmRpdGlvbmFsRmluYWxpemVyIHsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwogICAgIH07CkBAIC0xMjUsNiArMTExLDcgQEAgcHJpdmF0ZToKICAg
ICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21F
eGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkFzc2VtYmx5
Q2FsbGVlPj4gbV9jYWxsZWVzOwogICAgIFdhc206Ok1lbW9yeU1vZGUgbV9tb2RlOwogICAgIHVu
c2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzEsMzAgKzIzMSwzMCBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX2luc3RhbmNl
VmFsdWU7IC8vIEZJWE1FOiBtYWtlIHRoaXMgbGF6eSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY5NzkyCiB9OwogCi1zdGF0aWMgVmFsdWUqIGxvYWRXYXNtQ29udGV4
dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQorc3RhdGljIFZhbHVlKiBsb2Fk
V2FzbUNvbnRleHQoVk0qIHZtLCBQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrKQog
ewogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihwcm9jLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSk7CiAgICAgaWYgKEND
YWxsSGVscGVyczo6bG9hZFdhc21Db250ZXh0TmVlZHNNYWNyb1NjcmF0Y2hSZWdpc3RlcigpKQog
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7CiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwgQ0NhbGxIZWxwZXJzOjpsb2FkV2FzbUNvbnRleHRO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29u
dGV4dChwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dCh2
bSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAKICAgICByZXR1cm4gYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgSWRlbnRpdHksIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIH0K
IAotc3RhdGljIHZvaWQgc3RvcmVXYXNtQ29udGV4dChQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxv
Y2sqIGJsb2NrLCBWYWx1ZSogYXJnKQorc3RhdGljIHZvaWQgc3RvcmVXYXNtQ29udGV4dChWTSog
dm0sIFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiBhcmcpCiB7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CiAgICAgaWYgKENDYWxsSGVscGVy
czo6c3RvcmVXYXNtQ29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSkKICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAg
WyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZUlmIGFsbG93U2NyYXRjaChqaXQsIENDYWxsSGVscGVyczo6c3RvcmVXYXNt
Q29udGV4dE5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICBqaXQuc3Rv
cmVXYXNtQ29udGV4dChwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LnN0b3JlV2Fz
bUNvbnRleHQoKnZtLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKIH0KIApAQCAtMjk5
LDcgKzI5OSw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb24KIAog
ICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxh
dGlvbi0+d2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50
QmxvY2spOwogCi0gICAgbV9pbnN0YW5jZVZhbHVlID0gbG9hZFdhc21Db250ZXh0KG1fcHJvYywg
bV9jdXJyZW50QmxvY2spOworICAgIG1faW5zdGFuY2VWYWx1ZSA9IGxvYWRXYXNtQ29udGV4dCgm
bV92bSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiB9CiAKIHN0cnVjdCBNZW1vcnlCYXNlQW5k
U2l6ZSB7CkBAIC0zMjAsOSArMzIwLDkgQEAgc3RhdGljIE1lbW9yeUJhc2VBbmRTaXplIGdldE1l
bW9yeUJhc2VBbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFZh
bHVlKiBpbnN0YW5jZSwgUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jaykKK3N0YXRp
YyB2b2lkIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFZNJiB2bSwgY29uc3QgTWVtb3J5
SW5mb3JtYXRpb24mIG1lbW9yeSwgVmFsdWUqIGluc3RhbmNlLCBQcm9jZWR1cmUmIHByb2MsIEJh
c2ljQmxvY2sqIGJsb2NrKQogewotICAgIHN0b3JlV2FzbUNvbnRleHQocHJvYywgYmxvY2ssIGlu
c3RhbmNlKTsKKyAgICBzdG9yZVdhc21Db250ZXh0KCZ2bSwgcHJvYywgYmxvY2ssIGluc3RhbmNl
KTsKIAogICAgIGlmICghIW1lbW9yeSkgewogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKQEAgLTQ0Miw3ICs0
NDIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzCiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4o
KSwgYml0d2lzZV9jYXN0PHZvaWQqPihncm93TWVtb3J5KSksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdp
bigpKSwgZGVsdGEpOwogCi0gICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZv
Lm1lbW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrKTsKKyAgICBy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX3ZtLCBtX2luZm8ubWVtb3J5LCBtX2luc3Rh
bmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOwogCiAgICAgcmV0dXJuIHsgfTsKIH0K
QEAgLTkyOSw3ICs5MjksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuCiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8g
YW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmll
ZCBvdXIgTWVtb3J5LgotICAgICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2lu
Zm8ubWVtb3J5LCBtX2luc3RhbmNlVmFsdWUsIG1fcHJvYywgY29udGludWF0aW9uKTsKKyAgICAg
ICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUobV92bSwgbV9pbmZvLm1lbW9yeSwgbV9p
bnN0YW5jZVZhbHVlLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9j
dXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAg
ICAgICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBAIC0xMDIzLDcgKzEw
MjMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAg
IH0pOwogCiAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNz
ZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4K
LSAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShtX2luZm8ubWVtb3J5LCBtX2luc3Rh
bmNlVmFsdWUsIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOworICAgIHJlc3RvcmVXZWJBc3NlbWJs
eUdsb2JhbFN0YXRlKG1fdm0sIG1faW5mby5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9j
LCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTA2NSw3ICsxMDY1
LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogICAgIGRhdGFM
b2dMbigpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRp
b25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5j
dGlvbiwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvKQorc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgQ29tcGls
YXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBm
dW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvKQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4
dC5qc0VudHJ5cG9pbnRKSVQ7CiAKQEAgLTExOTMsNyArMTE5Myw3IEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWwKIAogICAgIGlmICghIWluZm8ubWVtb3J5KSB7CiAg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
LSAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dChiYXNlTWVtb3J5KTsKKyAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dCh2bSwgYmFzZU1lbW9yeSk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3Mg
PSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7CkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
V2FzbUludGVybmFsRnVuCiAgICAgICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgfQogCi0g
ICAgY3JlYXRlSlNUb1dhc21XcmFwcGVyKGNvbXBpbGF0aW9uQ29udGV4dCwgKnJlc3VsdCwgc2ln
bmF0dXJlLCBpbmZvKTsKKyAgICBjcmVhdGVKU1RvV2FzbVdyYXBwZXIodm0sIGNvbXBpbGF0aW9u
Q29udGV4dCwgKnJlc3VsdCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252
ZW50aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBjb25zdCBTaWduYXR1
cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUlu
ZGV4KTsKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OwotICAgIEpJVCBqaXQodm0sIG51bGxwdHIpOworICAgIEpJVCBqaXQobnVsbHB0cik7CiAKICAg
ICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBpcyBh
bHdheXMgb24gdGhlIHN0YWNrLgogICAgIEFTU0VSVCghanNDQy5tX2dwckFyZ3Muc2l6ZSgpKTsK
QEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhW
TQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgewotICAgICAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAg
ICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCp2bSk7CiAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKCk7CiAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwpAQCAtMzAy
LDcgKzMwMiw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAg
ICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGF1dG8gY2FsbCA9
IGppdC5jYWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1w
SWZFeGNlcHRpb24oKSk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRK
dW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAgICAgICAgaW50MzJfdCAoKmNvbnZlcnRUb0kzMiko
RXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+
IGludDMyX3QgeyAKICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMzM1LDcg
KzMzNSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAg
ICAgbm90QU51bWJlci5saW5rKCZqaXQpOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICAgICAgYXV0byBjYWxsID0g
aml0LmNhbGwoKTsKLSAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1
bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZs
b2F0IHsgCiAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTM2Nyw3ICszNjcs
NyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIG5v
dEFOdW1iZXIubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5j
YWxsKCk7Ci0gICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNl
cHRpb24oKSk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZF
eGNlcHRpb24oKnZtKSk7CiAKICAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3Rh
dGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91Ymxl
IHsgCiAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTM4OCw3ICszODgsNyBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAKICAgICBpZiAoIWV4
Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZq
aXQpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcigqdm0pOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgYXV0byBjYWxsID0gaml0
LmNhbGwoKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKQEAgLTQzMyw3
ICs0MzMsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20oCiAgICAg
R1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIEFT
U0VSVChiYXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVz
cyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZkluc3RhbmNlKCkpLCBiYXNl
TWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIGppdC5zdG9yZVdhc21Db250ZXh0KGJhc2VNZW1v
cnkpOworICAgIGppdC5zdG9yZVdhc21Db250ZXh0KCp2bSwgYmFzZU1lbW9yeSk7CiAKICAgICAv
LyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXZWJBc3NlbWJseS5J
bnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdz
IGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXIKIHN0
YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJvb2wgZmFz
dEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9Owogc3RhdGljIFN0YXRpY0xvY2sgY29kZUxvY2F0
aW9uc0xvY2s7Ci1zdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTxW
TSosIHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAodm0sIHN0YXJ0LCBlbmQpCitz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+
Pj4gY29kZUxvY2F0aW9uczsgLy8gKHZtLCBzdGFydCwgZW5kKQogCiBzdGF0aWMgdm9pZCB0cmFw
SGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQog
ewpAQCAtODEsMTIgKzgxLDEzIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWws
IHNpZ2kKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBhY3RpdmUgZmFz
dCBtZW1vcnkgZm9yIGZhdWx0aW5nIGFkZHJlc3MiKTsKICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKICAgICAgICAgICAgIGZvciAoYXV0byByYW5nZSA6
IGNvZGVMb2NhdGlvbnMuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBWTSogdm07CiAgICAgICAg
ICAgICAgICAgdm9pZCogc3RhcnQ7CiAgICAgICAgICAgICAgICAgdm9pZCogZW5kOwotICAgICAg
ICAgICAgICAgIHN0ZDo6dGllKHZtLCBzdGFydCwgZW5kKSA9IHJhbmdlOworICAgICAgICAgICAg
ICAgIHN0ZDo6dGllKHN0YXJ0LCBlbmQpID0gcmFuZ2U7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgImZ1bmN0aW9uIHN0YXJ0OiAiLCBSYXdQb2ludGVyKHN0YXJ0KSwgIiBl
bmQ6ICIsIFJhd1BvaW50ZXIoZW5kKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGZh
dWx0aW5nSW5zdHJ1Y3Rpb24gJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IGVuZCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRToKKyAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIG1h
dGNoIik7CiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGNlcHRp
b25TdHViID0gdm0tPmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9t
V2FzbVRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRl
dmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0
IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCkBAIC0xMDgsMjAgKzEwOSwyMCBAQCBzdGF0aWMg
dm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpCiAgICAgICAgIHNpZ2FjdGlvbihzaWdu
YWwsICZvbGRTaWdTZWd2SGFuZGxlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgcmVnaXN0ZXJDb2Rl
KFZNJiB2bSwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKK3ZvaWQgcmVnaXN0ZXJDb2RlKHZvaWQq
IHN0YXJ0LCB2b2lkKiBlbmQpCiB7CiAgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwot
ICAgIGNvZGVMb2NhdGlvbnMtPmFkZChzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7
CisgICAgY29kZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90dXBsZShzdGFydCwgZW5kKSk7CiB9
CiAKLXZvaWQgdW5yZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQor
dm9pZCB1bnJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKQogewogICAgIGlmICgh
ZmFzdE1lbW9yeUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIExvY2tIb2xkZXIgbG9j
a2VyKGNvZGVMb2NhdGlvbnNMb2NrKTsKLSAgICBjb2RlTG9jYXRpb25zLT5yZW1vdmUoc3RkOjpt
YWtlX3R1cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworICAgIGNvZGVMb2NhdGlvbnMtPnJlbW92ZShz
dGQ6Om1ha2VfdHVwbGUoc3RhcnQsIGVuZCkpOwogfQogCiBib29sIGZhc3RNZW1vcnlFbmFibGVk
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCAr
MzEsOCBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIFdhc20gewogCi12b2lkIHJlZ2lzdGVyQ29k
ZShWTSYsIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwotdm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYs
IHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwordm9pZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQs
IHZvaWQqIGVuZCk7Cit2b2lkIHVucmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQp
OwogCiBib29sIGZhc3RNZW1vcnlFbmFibGVkKCk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVu
YWJsZUZhc3RNZW1vcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDE5ICsyNTcsMTkgQEAgdm9pZCBQbGFu
OjpydW4oc3RkOjpvcHRpb25hbDxNZW1vcnlNb2RlPgogICAgIG1fZmFpbGVkID0gZmFsc2U7CiB9
CiAKLXZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgc3RkOjpmdW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwg
SlNXZWJBc3NlbWJseUNhbGxlZSopPiBjYWxsYmFjaykKK3ZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNh
bGxlZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc3RkOjpmdW5jdGlvbjx2b2lkKHVu
c2lnbmVkLCBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYsIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4m
Jik+IGNhbGxiYWNrKQogewogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewog
ICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwogCi0gICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlw
b2ludCkpOworICAgICAgICBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxl
ZSA9IFdlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21F
bnRyeXBvaW50KSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENhbGxlZSk7CiAK
LSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGZ1bmN0
aW9uLT53YXNtRW50cnlwb2ludCkpOworICAgICAgICBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+IHdh
c21FbnRyeXBvaW50Q2FsbGVlID0gV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1
bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50
Q2FsbGVlKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50
cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBjYWxsYmFjayhp
bnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92
ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87CiBjbGFzcyBKU0dsb2JhbE9i
amVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxl
ZTsKIAogbmFtZXNwYWNlIFdhc20gewogCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKHN0ZDo6b3B0aW9uYWw8TWVtb3J5TW9kZT4gPSBz
dGQ6Om51bGxvcHQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2Fs
bGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25lZCwgSlNXZWJB
c3NlbWJseUNhbGxlZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQodW5zaWduZWQsIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4mJiwgUmVmPFdlYkFzc2Vt
Ymx5Q2FsbGVlPiYmKT4pOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KICAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDI1ICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlDYWxsZWU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q2FsbGVlIiwg
bnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q2FsbGVlKSB9Owot
Ci1KU1dlYkFzc2VtYmx5Q2FsbGVlOjpKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJiB2bSkKLSAgICA6
IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlLmdldCgpKQoteyB9Ci0KLXZv
aWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNtOjpFbnRy
eXBvaW50JiYgZW50cnlwb2ludCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0K
LSAgICBtX2VudHJ5cG9pbnQgPSBXVEZNb3ZlKGVudHJ5cG9pbnQpOwotICAgIFdhc206OnJlZ2lz
dGVyQ29kZSh2bSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKK1dlYkFzc2VtYmx5Q2FsbGVlOjpXZWJBc3NlbWJs
eUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICA6IG1fZW50cnlwb2lu
dChXVEZNb3ZlKGVudHJ5cG9pbnQpKQoreyAKKyAgICBXYXNtOjpyZWdpc3RlckNvZGUobV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK1dlYkFzc2VtYmx5Q2FsbGVlOjp+V2ViQXNzZW1ibHlDYWxsZWUoKQogewotICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5
Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5yZWdpc3RlckNvZGUoKmNlbGwtPnZtKCksIHRo
aXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci0gICAgdGhpc09iamVjdC0+SlNX
ZWJBc3NlbWJseUNhbGxlZTo6fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKKyAgICBXYXNtOjp1bnJl
Z2lzdGVyQ29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4
ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMzcgKzMxLDI5IEBA
CiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1dlYkFz
c2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxlZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJBc3NlbWJseUNhbGxlZT4geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQor
ICAgIHN0YXRpYyBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+JiYgY3JlYXRlKFdhc206OkVudHJ5cG9p
bnQmJiBlbnRyeXBvaW50KQogICAgIHsKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogY2Fs
bGVlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNhbGxlZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlDYWxsZWUodm0pOwotICAgICAgICBjYWxsZWUtPmZpbmlzaENy
ZWF0aW9uKHZtLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZTsK
KyAgICAgICAgV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyBXZWJBc3NlbWJseUNhbGxl
ZShXVEZNb3ZlKGVudHJ5cG9pbnQpKTsKKyAgICAgICAgUmVmPFdlYkFzc2VtYmx5Q2FsbGVlPiBy
ZXN1bHQgPSBhZG9wdFJlZigqY2FsbGVlKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCi0gICAg
ewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLQotICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
LQogICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRp
b24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9Ci0KICAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVl
U2F2ZVJlZ2lzdGVyczsgfQogCi1wcml2YXRlOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAg
ICB+V2ViQXNzZW1ibHlDYWxsZWUoKTsKKworcHJvdGVjdGVkOgorICAgIFdlYkFzc2VtYmx5Q2Fs
bGVlKFdhc206OkVudHJ5cG9pbnQmJik7CiAKICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlw
b2ludDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNX
ZWJBc3NlbWJseUNvZAogICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKICAgICBt
X21vZHVsZS5zZXQodm0sIHRoaXMsIG93bmVyKTsKLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBt
X2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikg
KiAyKTsKKyAgICBtX2NhbGxlZXMucmVzaXplVG9GaXQobV9jYWxsZWVDb3VudCAqIDIpOwogfQog
CiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAt
NzgsOCArNzgsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKIAogICAgIHZpc2l0b3IuYWRkVW5j
b25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsOSArNTgsOSBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBKU1dlYkFzc2VtYmx5TW9k
CiAgICAgYXV0byogY29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZt
LCB0aGlzLCBwbGFuLnRha2VDYWxsTGlua0luZm9zKCksIHBsYW4udGFrZVdhc21FeGl0U3R1YnMo
KSwgcGxhbi5tb2RlKCksIGNhbGxlZUNvdW50KTsKIAogICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxl
ZXMoZXhlYy0+anNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCksCi0gICAgICAgIFsmXSAodW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+c2V0SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRy
eXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0V2FzbUVudHJ5cG9pbnRD
YWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIFsm
XSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4mJiBqc0VudHJ5
cG9pbnRDYWxsZWUsIFJlZjxXZWJBc3NlbWJseUNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxl
ZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKU0VudHJ5cG9pbnRDYWxsZWUoY2FsbGVl
SW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSk7CisgICAgICAgICAgICBjb2RlQmxv
Y2stPnNldFdhc21FbnRyeXBvaW50Q2FsbGVlKGNhbGxlZUluZGV4LCBXVEZNb3ZlKHdhc21FbnRy
eXBvaW50Q2FsbGVlKSk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiBjb2RlQmxvY2s7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE0NDIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3
ICsxMTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAg
ICAvLyBOb3RlOiB3ZSBzcGVjaWZpY2FsbHkgdXNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uIGFz
IHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8g
VGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0
YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93Ci0gICAgLy8gaGFuZGxlciBtaWdo
dCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1i
bHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKKyAgICAvLyBoYW5kbGVyIG1pZ2h0IHJlYWQgdGhlIGds
b2JhbCBvYmplY3QgZnJvbSB0aGUgY2FsbGVlLiBUaGUgV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24n
dCBoYXZlIGEKICAgICAvLyBnbG9iYWwgb2JqZWN0LCBidXQgdGhlIFdlYkFzc2VtYmx5RnVuY3Rp
b24gZG9lcy4KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBwcm90b0Nh
bGxGcmFtZS5pbml0KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJnQ291
bnQsIHJlbWFpbmluZ0FyZ3MpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsKIH0K
IAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9p
bnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5j
dGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFJlZlB0cjxXZWJBc3NlbWJseUNhbGxlZT4ganNF
bnRyeXBvaW50LCBXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIE5vSW50
cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rp
b25TdHJ1Y3R1cmUoKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNz
ZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uOjpX
ZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fd2FzbUVudHJ5UG9pbnRDb2RlKHdhc21FbnRy
eXBvaW50LT5lbnRyeXBvaW50KCkpCiAgICAgLCBtX3NpZ25hdHVyZUluZGV4KHNpZ25hdHVyZUlu
ZGV4KQpAQCAtMTc0LDE4ICsxNzQsMTYgQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwotICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fanNFbnRyeXBvaW50KTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3dhc21FbnRyeXBvaW50KTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50KQordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlLCBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgV2ViQXNzZW1ibHlD
YWxsZWUqIHdhc21FbnRyeXBvaW50KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBl
eGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygp
KSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlKTsKICAgICBBU1NFUlQo
anNFbnRyeXBvaW50ICE9IHdhc21FbnRyeXBvaW50KTsKLSAgICBtX2pzRW50cnlwb2ludC5zZXQo
dm0sIHRoaXMsIGpzRW50cnlwb2ludCk7Ci0gICAgbV93YXNtRW50cnlwb2ludC5zZXQodm0sIHRo
aXMsIHdhc21FbnRyeXBvaW50KTsKKyAgICBtX2pzRW50cnlwb2ludCA9IGpzRW50cnlwb2ludDsK
KyAgICBtX3dhc21FbnRyeXBvaW50ID0gd2FzbUVudHJ5cG9pbnQ7CiAgICAgQVNTRVJUKG1fd2Fz
bUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSA9PSBtX3dhc21FbnRyeVBvaW50Q29kZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNDQyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSos
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRy
eXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdl
dCgpOyB9CkBAIC02MywxNSArNjMsMjAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1ibHlD
YWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQp
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50
cnlwb2ludCk7CiAKIHByaXZhdGU6Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25h
dHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25hdHVyZUluZGV4KTsK
IAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAg
ICAgdm9pZCogbV93YXNtRW50cnlQb2ludENvZGU7IC8vIENhY2hlIGNvZGUgcG9pbnRlcjogYWxs
b3dzIHRoZSB3YXNtIC0+IHdhc20gc3R1YiB0byBkbyBhIHNpbmdsZSBsb2FkIGFuZCBqdW1wIGlu
c3RlYWQgb2YgaGF2aW5nIGRlcGVuZGVudCBsb2Fkcy4KLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNhbGxlZT4gbV9qc0VudHJ5cG9pbnQ7Ci0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+IG1fd2FzbUVudHJ5cG9pbnQ7CisKKyAgICAvLyBXZSBob2xkIHJhdyBwb2lu
dGVycyB0byB0aGVzZSBlbnRyeSBwb2ludHMsIGV2ZW4gdGhvdWdoIHRoZXkncmUgcmVmIGNvdW50
ZWQuIFRoYXQncworICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gYmUgYSBkZXN0cnVjdGlibGUg
Y2VsbC4gVGhlc2UgcG9pbnRlcnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWxpdmUKKyAgICAvLyBi
ZWNhdXNlIHdlIHBvaW50IHRvIHRoZSBpbnN0YW5jZSwgd2hpY2ggb3ducyB0aGUgQ29kZUJsb2Nr
LCB3aGljaCBvd25zIHRoZXNlIHBvaW50ZXJzLgorICAgIFdlYkFzc2VtYmx5Q2FsbGVlKiBtX2pz
RW50cnlwb2ludDsKKyAgICBXZWJBc3NlbWJseUNhbGxlZSogbV93YXNtRW50cnlwb2ludDsKKwog
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMTQ0MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw4ICsxMjQsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
CiAgICAgICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0
aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAgICAgLy8gICAg
IGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1
cm4gZnVuYy4KLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9p
bnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBz
aWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVu
Y3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZC5zdHJpbmcoKSwgaW5zdGFuY2UsIGpz
RW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsK
QEAgLTE5NSw4ICsxOTUsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4
ZWNTCiAgICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBv
cnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSktPmdldCgpOwogICAgICAgICAgICAg
bV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAg
ICAgICBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVC
bG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBSZWZQdHI8V2ViQXNzZW1ibHlDYWxsZWU+IHdh
c21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJzdGFydCIs
IGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWdu
YXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBm
dW5jdGlvbik7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306124</attachid>
            <date>2017-04-03 15:27:55 -0700</date>
            <delta_ts>2017-04-03 17:11:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>62917</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMTUwMiw3ICsxNTAy
LDcgQEAKICAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOiBBZGRlZC4KICAgICAgICAgKEpT
Qzo6V2FzbTo6V29ya2xpc3Q6Om5leHRUaWNrZXQpOgogICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Ci0gICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmg6CisgICAgICAgIGUgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg6
CiAgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKICAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CiAg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUpOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBib3goRXhlY1N0YXRlKiBleGVjLCBWTSYgCiB9CiAKIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTgyLgotc3RhdGljIEpTVmFsdWUg
Y2FsbFdhc21GdW5jdGlvbihWTSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykK
K3N0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgY29uc3Qg
QXJnTGlzdCYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudDsKICAgICBp
bnQgYXJnQ291bnQgPSAxOwpAQCAtMzIwMiwxNSArMzIwMiwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgaWYgKHBsYW4tPmludGVybmFsRnVuY3Rpb25D
b3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBjYWxsZWVzOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtlZXBBbGl2
ZTsKKyAgICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4gY2FsbGVlczsKKyAg
ICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4ga2VlcEFsaXZlOwogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7CiAgICAgICAgIHBsYW4tPmlu
aXRpYWxpemVDYWxsZWVzKAotICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIGpzRW50cnlwb2ludENh
bGxlZSwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVl
KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxs
ZWVJbmRleCAtIDEgPT0gbGFzdEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBl
bmQoanNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgICAgICBrZWVwQWxpdmUuYXBwZW5k
KHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChX
VEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgIGtlZXBBbGl2ZS5h
cHBlbmQoV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIGxh
c3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzIzOCw3
ICszMjM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAg
ICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0OwogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgICAg
ICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94
ZWRBcmdzKTsKKyAgICAgICAgICAgICAgICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigm
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlc1tpXS5wdHIoKSwgYm94ZWRB
cmdzKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2
bSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJl
Zi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAg
ICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBhbnkg
ZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJhbWUs
IGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAg
ICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAgICAgICAgICAg
IGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYgdmlzaXRvci0+
aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1f
YnVpbGRlcjsKICAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBAIC0yODEsNyAr
MjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxp
bmVOdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNhbGxlZSkKKyAg
ICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdD
YXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk3LDYg
KzE0OTcsNyBAQAogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0Yw
MDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC00MDQ0LDYgKzQwNDUsNyBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAz
MDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE0MUU1RDc5
OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY1QzIxNTFF
NUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTZEQUEyQTFFODlDQ0Q2
MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxsZWVCaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NzM4LDYgKzU3NDAsNyBAQAogCQkJCTBGNTVGMEYxMTREMTA2MzYw
MEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2
NDkgLyogQWJzdHJhY3RQQy5oICovLAogCQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBD
YWNoZWRDYWxsLmggKi8sCisJCQkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLywKIAkJCQkxNDI5RDhEQjBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCAq
LywKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJ
QTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAqLywKQEAgLTg4
NjIsNiArODg2NSw3IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJ
Q0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUg
LyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFC
RkJFNTYxMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
OTZEQUEyQjFFODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg1LDcgKzE4NSw4IEBAIFJlZ2lzdGVyKiBDYWxsRnJhbWU6OnRvcE9mRnJhbWVJ
bnRlcm5hbCgKIAogSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6dm1FbnRyeUdsb2JhbE9iamVj
dCgpCiB7Ci0gICAgaWYgKGNhbGxlZSgpLT5pc09iamVjdCgpKSB7IAorICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxlZSgpLmlzQ2VsbCgpKTsKKyAgICBpZiAoY2FsbGVlKCkuYXNDZWxsKCktPmlzT2Jq
ZWN0KCkpIHsgCiAgICAgICAgIGlmICh0aGlzID09IGxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpKQogICAgICAgICAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKICAg
ICB9CkBAIC0yMTksOSArMjIwLDExIEBAIFNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJh
bWU6OnVuc2EKIAogU291cmNlT3JpZ2luIENhbGxGcmFtZTo6Y2FsbGVyU291cmNlT3JpZ2luKCkK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgVk0qIHZtID0g
JnRoaXMtPnZtKCk7CiAgICAgU291cmNlT3JpZ2luIHNvdXJjZU9yaWdpbjsKICAgICBib29sIGhh
dmVTa2lwcGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQodGhp
cywgWyZdKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgeworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQo
dGhpcywgdm0sIFsmXShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgaWYgKCFzdGQ6
OmV4Y2hhbmdlKGhhdmVTa2lwcGVkRmlyc3RGcmFtZSwgdHJ1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpTdGF0dXM6OkNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMTQ4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWJzdHJh
Y3RQQy5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRv
ci5oIgpAQCAtODYsOSArODcsMTcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBoZWFkZXJTaXplSW5SZWdpc3RlcnMgPSBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50ICsgMTsKIAotICAgICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUo
KSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0uanNWYWx1ZSgpOyB9
Ci0gICAgICAgIEpTT2JqZWN0KiBqc0NhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsgfQotICAgICAgICBKU0NlbGwqIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS51bmJveGVkQ2VsbCgpOyB9
CisgICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgICAgICAgICAgcmV0dXJuIHRo
aXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAg
SlNPYmplY3QqIGpzQ2FsbGVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgICAgICAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVT
bG90OjpjYWxsZWVdLm9iamVjdCgpOworICAgICAgICB9CisgICAgICAgIENhbGxlZUJpdHMgY2Fs
bGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxl
ZV0ucG9pbnRlcigpKTsgfQogICAgICAgICBTVVBQUkVTU19BU0FOIEpTVmFsdWUgdW5zYWZlQ2Fs
bGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNh
ZmVKU1ZhbHVlKCk7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygp
OyB9CiAgICAgICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7IH0KQEAgLTI1Nyw5ICsyNjYsMTggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAv
LyAgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImKSBjb25z
dDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIGltcHJvcGVyLiBXZSByZWx5IG9u
IHRoZSBmYWN0IHRoYXQgd2UgY2FuIGNhbGwgaXQgd2l0aCBhIG51bGwKICAgICAgICAgLy8gcmVj
ZWl2ZXIuIFdlIHNob3VsZCBhbHdheXMgYmUgdXNpbmcgU3RhY2tWaXNpdG9yIGRpcmVjdGx5Lgor
ICAgICAgICAvLyBJdCdzIG9ubHkgdmFsaWQgdG8gY2FsbCB0aGlzIGZyb20gYSBub24td2FzbSB0
b3AgZnJhbWUuCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGl0ZXJh
dGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICAgICAgewotICAgICAgICAgICAgU3RhY2tW
aXNpdG9yOjp2aXNpdDxGdW5jdG9yPih0aGlzLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIFZNKiB2
bTsKKyAgICAgICAgICAgIHZvaWQqIHBsZWFzZUZJWE1FID0gdGhpczsKKyAgICAgICAgICAgIGlm
ICghIXBsZWFzZUZJWE1FKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
KCkuaXNDZWxsKCkpOworICAgICAgICAgICAgICAgIHZtID0gJnRoaXMtPnZtKCk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB2bSA9IG51bGxwdHI7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgICAgICAgICBTdGFja1Zpc2l0
b3I6OnZpc2l0PEZ1bmN0b3I+KHRoaXMsIHZtLCBmdW5jdG9yKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVCaXRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworY2xhc3MgV2ViQXNzZW1ibHlDYWxsZWU7
Cit9CisKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3MgQ2FsbGVlQml0cyB7CitwdWJsaWM6CisgICAg
Q2FsbGVlQml0cygpID0gZGVmYXVsdDsKKyAgICBDYWxsZWVCaXRzKHZvaWQqIHB0cikgOiBtX3B0
cihwdHIpIHsgfSAKKworICAgIENhbGxlZUJpdHMmIG9wZXJhdG9yPShKU0NlbGwqIGNlbGwpCisg
ICAgeworICAgICAgICBtX3B0ciA9IGNlbGw7CisgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIGlzV2FzbSgpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIDE7IH0KKyAgICBib29sIGlz
Q2VsbCgpIGNvbnN0IHsgcmV0dXJuICFpc1dhc20oKTsgfQorCisgICAgQUxXQVlTX0lOTElORSBK
U0NlbGwqIGFzQ2VsbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzV2FzbSgpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQ2VsbCo+KG1fcHRyKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBhc1dhc21DYWxsZWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzV2FzbSgpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSo+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG1fcHRyKSAmIH4xKTsKKyAgICB9CisKKyAgICB2b2lkKiByYXdQdHIoKSBjb25zdCB7IHJl
dHVybiBtX3B0cjsgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkKiBtX3B0ciB7IG51bGxwdHIg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZSkgewotICAgICAgICAg
ICAgaWYgKCF2aXNpdG9yLT5pc1dhc21GcmFtZSgpCi0gICAgICAgICAgICAgICAgJiYgISF2aXNp
dG9yLT5jb2RlQmxvY2soKQotICAgICAgICAgICAgICAgICYmICF2aXNpdG9yLT5jb2RlQmxvY2so
KS0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgeworICAgICAgICAg
ICAgaWYgKHZpc2l0b3ItPmlzV2FzbUZyYW1lKCkpCisgICAgICAgICAgICAgICAgbV9yZXN1bHRz
LmFwcGVuZChTdGFja0ZyYW1lOjp3YXNtKCkpOworICAgICAgICAgICAgZWxzZSBpZiAoISF2aXNp
dG9yLT5jb2RlQmxvY2soKSAmJiAhdmlzaXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJs
b2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMu
YXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIHZpc2l0b3ItPmNh
bGxlZSgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSkp
OworICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgp
LmFzQ2VsbCgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQo
KSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sICB2aXNpdG9yLT5jYWxs
ZWUoKSkpOworICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1lKG1fdm0sIHZpc2l0b3ItPmNh
bGxlZSgpLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBtX3Jl
bWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlLS07CkBAIC01MDMsNyArNTAzLDcgQEAgdm9p
ZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0b3I8UwogICAgICAgICByZXR1cm47CiAK
ICAgICBzaXplX3QgZnJhbWVzQ291bnQgPSAwOwotICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShbJl0g
KFN0YWNrVmlzaXRvciYpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKKyAgICBTdGFja1Zpc2l0
b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBbJl0gKFN0YWNrVmlzaXRvciYpIC0+IFN0YWNrVmlz
aXRvcjo6U3RhdHVzIHsKICAgICAgICAgZnJhbWVzQ291bnQrKzsKICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfSk7CkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBJ
bnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0b3I8UwogICAgIGZyYW1lc0NvdW50ID0gc3Rk
OjptaW4obWF4U3RhY2tTaXplLCBmcmFtZXNDb3VudCk7CiAKICAgICBHZXRTdGFja1RyYWNlRnVu
Y3RvciBmdW5jdG9yKHZtLCByZXN1bHRzLCBmcmFtZXNUb1NraXAsIGZyYW1lc0NvdW50KTsKLSAg
ICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChj
YWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgQVNTRVJUKHJlc3VsdHMuc2l6ZSgpID09IHJl
c3VsdHMuY2FwYWNpdHkoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiAr
NzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50MzJfdCYgcGF5bG9hZCgpOwogICAg
ICAgICBpbnQzMl90JiB0YWcoKTsKIAorICAgICAgICB2b2lkKiBwb2ludGVyKCkgY29uc3Q7CisK
ICAgICAgICAgc3RhdGljIFJlZ2lzdGVyIHdpdGhJbnQoaW50MzJfdCBpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBSZWdpc3RlciByID0ganNOdW1iZXIoaSk7CkBAIC0xOTUsNiArMTk3LDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lk
KiBSZWdpc3Rlcjo6cG9pbnRlcigpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIHJldHVybiB1LmVuY29kZWRWYWx1ZS5wdHI7CisjZWxzZQorICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PHZvaWQqPihwYXlsb2FkKCkpOworI2VuZGlmCisgICAgfQorCiAgICAgQUxX
QVlTX0lOTElORSBpbnQzMl90IFJlZ2lzdGVyOjpwYXlsb2FkKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiB1LmVuY29kZWRWYWx1ZS5hc0JpdHMucGF5bG9hZDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJl
dmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2hh
ZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAgICBpZiAoIW1fc3RhY2suaXNFbXB0
eSgpKSB7CiAgICAgICAgIFZlY3RvcjxGcmFtZT4gc3RhY2tSaWdodE5vdzsKICAgICAgICAgU3Rh
Y2tWaXNpdG9yOjp2aXNpdCgKLSAgICAgICAgICAgIGV4ZWMsIFsmXSAoU3RhY2tWaXNpdG9yJiB2
aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CisgICAgICAgICAgICBleGVjLCAmdm0s
IFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAg
ICAgICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKSB7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBT
aGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAgICAgICAgICAgICAgIGJvb2wg
aXNUYWlsRGVsZXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHNo
YWRvdyBjaGlja2VuIHdvcmsgd2l0aCBXYXNtLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0NDEKLSAgICAgICAgICAgICAgICBz
dGFja1JpZ2h0Tm93LmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxs
ZWUoKSksIHZpc2l0b3ItPmNhbGxGcmFtZSgpLCBpc1RhaWxEZWxldGVkKSk7CisgICAgICAgICAg
ICAgICAgc3RhY2tSaWdodE5vdy5hcHBlbmQoRnJhbWUoanNDYXN0PEpTT2JqZWN0Kj4odmlzaXRv
ci0+Y2FsbGVlKCkuYXNDZWxsKCkpLCB2aXNpdG9yLT5jYWxsRnJhbWUoKSwgaXNUYWlsRGVsZXRl
ZCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIHN0YWNrUmlnaHROb3cucmV2ZXJzZSgpOwpAQCAtMjczLDcg
KzI3Myw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAgICAK
ICAgICBWZWN0b3I8RnJhbWU+IHRvUHVzaDsKICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KAotICAg
ICAgICBleGVjLCBbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpT
dGF0dXMgeworICAgICAgICBleGVjLCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAt
PiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNJbmxp
bmVkRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgaW5saW5pbmcu
CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTY4NgpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRl
KFZNJiB2bSwgRXhlY1MKICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCiAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5pbmhlcml0cyh2bSwgSlNTY29wZTo6aW5mbygp
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b1B1c2guYXBwZW5kKEZyYW1lKGpzQ2Fz
dDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKSwgY2FsbEZyYW1lLCBpc1RhaWxEZWxldGVk
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUtPmNh
bGxTaXRlSW5kZXgoKSkpOworICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZShqc0Nhc3Q8
SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSksIGNhbGxGcmFtZSwgaXNUYWls
RGVsZXRlZCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgc2NvcGUsIGNvZGVCbG9jaywgY2FsbEZy
YW1lLT5jYWxsU2l0ZUluZGV4KCkpKTsKIAogICAgICAgICAgICAgaWYgKGluZGV4SW5Mb2cgPCBs
b2dDdXJzb3JJbmRleAogICAgICAgICAgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIHByb3RlY3Rz
IHVzIGZyb20gdGhlIGNhc2Ugd2hlcmUgYWR2YW5jZUluZGV4SW5Mb2dUbyBkaWRuJ3QgZmluZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNCArMzYsMTUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENhbGxG
cmFtZSogc3RhcnRGcmFtZSkKK1N0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENhbGxGcmFtZSog
c3RhcnRGcmFtZSwgVk0qIHZtKQogewogICAgIG1fZnJhbWUubV9pbmRleCA9IDA7CiAgICAgbV9m
cmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAgICAgQ2FsbEZyYW1lKiB0b3BGcmFtZTsKICAg
ICBpZiAoc3RhcnRGcmFtZSkgewotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gc3Rh
cnRGcmFtZS0+dm0oKS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHRvcEZyYW1lID0gc3RhcnRG
cmFtZS0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgICAgIEFTU0VSVCh2bSk7CisgICAgICAgIG1f
ZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAgICAgICB0b3BG
cmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAgIAogICAgICAgICBpZiAodG9wRnJhbWUg
JiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9WTUVudHJ5RnJhbWUpID09IHN0YXRpY19j
YXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKICAgICAgICAgICAgIHRvcEZyYW1lID0gdm1FbnRyeVJl
Y29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2VG9wQ2FsbEZyYW1lOwpAQCAtMTAz
LDcgKzEwNCw4IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkRnJhbWUoQ2FsbEZyYW1lKiAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChjYWxsRnJhbWUtPmNhbGxlZSgpLT5pc0Fu
eVdhc21DYWxsZWUoY2FsbEZyYW1lLT52bSgpKSkgeworICAgIGlmICghIWNhbGxGcmFtZS0+Y2Fs
bGVlKCkucmF3UHRyKCkKKyAgICAgICAgJiYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkuaXNXYXNtKCkg
fHwgaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbEZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkp
KSB7CiAgICAgICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE1NSwxMCArMTU3LDExIEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
Tm9uSW5saW5lZEZyYW1lKEMKICAgICBtX2ZyYW1lLm1fY2FsbGVySXNWTUVudHJ5RnJhbWUgPSBt
X2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lICE9IG1fZnJhbWUubV9WTUVudHJ5RnJhbWU7CiAg
ICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAKLSAgICBKU0NlbGwqIGNhbGxlZSA9
IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgQ2FsbGVlQml0cyBjYWxsZWUgPSBjYWxsRnJhbWUt
PmNhbGxlZSgpOwogICAgIG1fZnJhbWUubV9jYWxsZWUgPSBjYWxsZWU7CiAKLSAgICBpZiAoY2Fs
bGVlLT5pc0FueVdhc21DYWxsZWUoKmNhbGxlZS0+dm0oKSkpIHsKKyAgICBpZiAoY2FsbGVlLnJh
d1B0cigpCisgICAgICAgICYmIChjYWxsZWUuaXNXYXNtKCkgfHwgaXNXZWJBc3NlbWJseVRvSlND
YWxsZWUoY2FsbGVlLmFzQ2VsbCgpKSkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1l
ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgICAg
IG1fZnJhbWUubV9ieXRlY29kZU9mZnNldCA9IDA7CkBAIC0yMDQsNyArMjA3LDcgQEAgdm9pZCBT
dGFja1Zpc2l0b3I6OnJlYWRJbmxpbmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIEpTRnVuY3Rpb24q
IGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7
CiAgICAgICAgIG1fZnJhbWUubV9jYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIEFTU0VSVChtX2Zy
YW1lLmNhbGxlZSgpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9mcmFtZS5jYWxsZWUoKS5yYXdQdHIo
KSk7CiAKICAgICAgICAgLy8gVGhlIGNhbGxlckZyYW1lIGp1c3QgbmVlZHMgdG8gYmUgbm9uLW51
bGwgdG8gaW5kaWNhdGUgdGhhdCB3ZQogICAgICAgICAvLyBoYXZlbid0IHJlYWNoZWQgdGhlIGxh
c3QgZnJhbWUgeWV0LiBTZXR0aW5nIGl0IHRvIHRoZSByb290CkBAIC0yNTQsMTQgKzI1NywxMiBA
QCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9yOjpGcmFtCiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgaWYgKGlzV2FzbUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKEpTQ2Vs
bCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkpIHsKLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVl
Kj4oKmNhbGxlZS0+dm0oKSwgY2FsbGVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FzbUNh
bGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgICAgICAgICAgLy8gT3RoZXIgd2FzbSBj
YWxsZWVzIChlLmcsIHN0dWJzKSBkb24ndCB1c2UgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyBu
b3RoaW5nIG5lZWRzCi0gICAgICAgICAgICAvLyB0byBiZSByZXN0b3JlZCBmb3IgdGhlbS4KKyAg
ICAgICAgaWYgKGNhbGxlZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNXZWJB
c3NlbWJseVRvSlNDYWxsZWUoY2FsbGVlKCkuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlID0gY2FsbGVlKCkuYXNXYXNtQ2Fs
bGVlKCk7CisgICAgICAgIHJldHVybiB3YXNtQ2FsbGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIApAQCAtMjc2LDcgKzI3Nyw2
IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3I6OkZyYW0KIFN0cmluZyBTdGFj
a1Zpc2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAogewogICAgIFN0cmluZyB0cmFj
ZUxpbmU7Ci0gICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsKIAogICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgewogICAgIGNhc2UgQ29kZVR5cGU6Oldhc206CkBAIC0yODgsMTIgKzI4
OCwxNCBAQCBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1lCiAgICAgY2Fz
ZSBDb2RlVHlwZTo6TW9kdWxlOgogICAgICAgICB0cmFjZUxpbmUgPSBBU0NJSUxpdGVyYWwoIm1v
ZHVsZSBjb2RlIik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZToK
KyAgICBjYXNlIENvZGVUeXBlOjpOYXRpdmU6IHsKKyAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB0
aGlzLT5jYWxsZWUoKS5hc0NlbGwoKTsKICAgICAgICAgaWYgKGNhbGxlZSkKICAgICAgICAgICAg
IHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwg
anNDYXN0PEpTT2JqZWN0Kj4oY2FsbGVlKSkuaW1wbCgpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIENvZGVUeXBlOjpGdW5jdGlvbjoKLSAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLT52bSgpLCBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsZWUp
KS5pbXBsKCk7CisgICAgfQorICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOiAKKyAgICAgICAg
dHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLT52bSgpLCBq
c0Nhc3Q8SlNPYmplY3QqPih0aGlzLT5jYWxsZWUoKS5hc0NlbGwoKSkpLmltcGwoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDb2RlVHlwZTo6R2xvYmFsOgogICAgICAgICB0cmFjZUxpbmUg
PSBBU0NJSUxpdGVyYWwoImdsb2JhbCBjb2RlIik7CkBAIC00NTUsNyArNDU3LDcgQEAgdm9pZCBT
dGFja1Zpc2l0b3I6OkZyYW1lOjpkdW1wKFByaW50U3RyZQogICAgICAgICAgICAgb3V0LnByaW50
KGluZGVudCwgIklubGluZUNhbGxGcmFtZTogIiwgUmF3UG9pbnRlcihtX2lubGluZUNhbGxGcmFt
ZSksICJcbiIpOwogI2VuZGlmCiAKLSAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNhbGxlZTog
IiwgUmF3UG9pbnRlcihjYWxsZWUoKSksICJcbiIpOworICAgICAgICBvdXQucHJpbnQoaW5kZW50
LCAiY2FsbGVlOiAiLCBSYXdQb2ludGVyKGNhbGxlZSgpLnJhd1B0cigpKSwgIlxuIik7CiAgICAg
ICAgIG91dC5wcmludChpbmRlbnQsICJyZXR1cm5QQzogIiwgUmF3UG9pbnRlcihyZXR1cm5QQyks
ICJcbiIpOwogICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiY2FsbGVyRnJhbWU6ICIsIFJhd1Bv
aW50ZXIoY2FsbGVyRnJhbWUpLCAiXG4iKTsKICAgICAgICAgdW5zaWduZWQgbG9jYXRpb25SYXdC
aXRzID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUFzUmF3Qml0cygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNpb24gMjE0
ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQ2FsbGVlQml0cy5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRl
IDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9JbmRlbnRlci5oPgpAQCAtNjIsNyArNjMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNv
bnN0IHsgcmV0dXJuIG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IH0KICAgICAgICAgYm9v
bCBjYWxsZXJJc1ZNRW50cnlGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySXNWTUVudHJ5
RnJhbWU7IH0KICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGVyRnJhbWU7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxlZTsgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGVlOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2s7IH0KICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9CiAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKCkgY29uc3QgewpAQCAtMTEwLDcgKzExMSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgVk1FbnRyeUZyYW1lKiBtX1ZNRW50cnlGcmFtZTsKICAgICAgICAgVk1FbnRyeUZyYW1l
KiBtX0NhbGxlclZNRW50cnlGcmFtZTsKICAgICAgICAgQ2FsbEZyYW1lKiBtX2NhbGxlckZyYW1l
OwotICAgICAgICBKU0NlbGwqIG1fY2FsbGVlOworICAgICAgICBDYWxsZWVCaXRzIG1fY2FsbGVl
OwogICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgICAgICBzaXplX3QgbV9pbmRl
eDsKICAgICAgICAgc2l6ZV90IG1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CkBAIC0xMzAs
OSArMTMxLDkgQEAgcHVibGljOgogICAgIC8vICAgICBTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zp
c2l0b3ImKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0
YXRpYyB2b2lkIHZpc2l0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICBzdGF0aWMgdm9pZCB2aXNpdChDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZNKiB2
bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIFN0YWNrVmlzaXRvciB2
aXNpdG9yKHN0YXJ0RnJhbWUpOworICAgICAgICBTdGFja1Zpc2l0b3IgdmlzaXRvcihzdGFydEZy
YW1lLCB2bSk7CiAgICAgICAgIHdoaWxlICh2aXNpdG9yLT5jYWxsRnJhbWUoKSkgewogICAgICAg
ICAgICAgU3RhdHVzIHN0YXR1cyA9IGZ1bmN0b3IodmlzaXRvcik7CiAgICAgICAgICAgICBpZiAo
c3RhdHVzICE9IENvbnRpbnVlKQpAQCAtMTQ2LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHVud2luZFRvTWFjaGluZUNvZGVCbG9ja0ZyYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RhY2tWaXNpdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tWaXNpdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ290b05leHRGcmFtZSgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
NSwxMSArNTk1LDE1IEBAIHZvaWQgbGlua0ZvcigKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5z
dHViKCkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1l
KCk7CisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4g
V2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVl
IGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsK
KwogICAgIFZNJiB2bSA9IGNhbGxlckZyYW1lLT52bSgpOwogICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwogCiAgICAgLy8gV2ViQXNzZW1i
bHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwq
IG93bmVyID0gaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpKSA/
IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpKSA6IGNhbGxlckNvZGVCbG9j
azsKKyAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVyRnJh
bWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNh
bGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKICAgICBBU1NFUlQob3duZXIpOwog
CiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CkBAIC03MTcsMTIgKzcyMSwx
NyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgfQogCiAgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKCk7CisKKyAgICAvLyBPdXIgY2FsbGVyIG11
c3QgYmUgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKKyAgICAvLyB0aGlz
IGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAgIEFTU0VSVChj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCiAgICAgVk0mIHZtID0gY2FsbGVyRnJh
bWUtPnZtKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJBc3NlbWJseVRvSlND
YWxsZWUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpKTsKKyAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBp
c1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpOwog
CiAgICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVC
bG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseSA/IHdlYkFzc2VtYmx5T3du
ZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBKU0NlbGwq
IG93bmVyID0gaXNXZWJBc3NlbWJseSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNh
bGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKICAgICBBU1NFUlQob3duZXIpOwog
CiAgICAgQ2FsbFZhcmlhbnRMaXN0IGxpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBi
b29sIGFkZEVycm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KEV4CiAKICAgICAgICAgaWYgKGJ5
dGVjb2RlT2Zmc2V0KSB7CiAgICAgICAgICAgICBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2Rl
YmxvY2tGdW5jdG9yIGZ1bmN0b3IoZXhlYyk7Ci0gICAgICAgICAgICB2bS50b3BDYWxsRnJhbWUt
Pml0ZXJhdGUoZnVuY3Rvcik7CisgICAgICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHZtLnRv
cENhbGxGcmFtZSwgJnZtLCBmdW5jdG9yKTsKICAgICAgICAgICAgIGNhbGxGcmFtZSA9IGZ1bmN0
b3IuZm91bmRDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBm
dW5jdG9yLmluZGV4KCk7CiAgICAgICAgICAgICAqYnl0ZWNvZGVPZmZzZXQgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOCArMTU2LDEwIEBAIHZvaWQgRXJyb3JJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1MKICAgICBib29sIGhhc1RyYWNlID0gYWRkRXJy
b3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQoZXhlYywgdm0sIHRoaXMsIHVzZUN1cnJlbnRGcmFt
ZSwgY2FsbEZyYW1lLCBoYXNTb3VyY2VBcHBlbmRlcigpID8gJmJ5dGVjb2RlT2Zmc2V0IDogbnVs
bHB0cik7CiAKICAgICBpZiAoaGFzVHJhY2UgJiYgY2FsbEZyYW1lICYmIGhhc1NvdXJjZUFwcGVu
ZGVyKCkpIHsKLSAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
KSAKKyAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2FsbGVlKCkuaXNXYXNtKCkpOwogICAgICAg
ICAgICAgYXBwZW5kU291cmNlVG9FcnJvcihjYWxsRnJhbWUsIHRoaXMsIGJ5dGVjb2RlT2Zmc2V0
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsMTUgKzI5NSw0IEBA
IEpTVmFsdWUgSlNDZWxsOjpnZXRQcm90b3R5cGUoSlNPYmplY3QqLCAKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEpTQ2VsbDo6aXNBbnlXYXNtQ2FsbGVlKFZN
JiB2bSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgcmV0dXJuIGluaGVy
aXRzKHZtLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjppbmZvKCkpIHx8IGlzV2ViQXNzZW1ibHlUb0pT
Q2FsbGVlKHRoaXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotCi19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKICAgICBib29sIGlz
U3ltYm9sKCkgY29uc3Q7CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwotICAgIGJvb2wgaXNB
bnlXYXNtQ2FsbGVlKFZNJikgY29uc3Q7CiAgICAgYm9vbCBpc0dldHRlclNldHRlcigpIGNvbnN0
OwogICAgIGJvb2wgaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSBjb25zdDsKICAgICBib29sIGlzUHJv
eHkoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDExICsxMjYsMTIg
QEAgaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbgogCiBBTFdBWVNfSU5M
SU5FIFZNJiBFeGVjU3RhdGU6OnZtKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoY2FsbGVlKCkpOwot
ICAgIEFTU0VSVChjYWxsZWUoKS0+dm0oKSk7Ci0gICAgQVNTRVJUKCFjYWxsZWUoKS0+aXNMYXJn
ZUFsbG9jYXRpb24oKSk7CisgICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKS5hc0Nl
bGwoKTsKKyAgICBBU1NFUlQoY2FsbGVlKTsKKyAgICBBU1NFUlQoY2FsbGVlLT52bSgpKTsKKyAg
ICBBU1NFUlQoIWNhbGxlZS0+aXNMYXJnZUFsbG9jYXRpb24oKSk7CiAgICAgLy8gVGhpcyBpcyBh
biBpbXBvcnRhbnQgb3B0aW1pemF0aW9uIHNpbmNlIHdlIGFjY2VzcyB0aGlzIHNvIG9mdGVuLgot
ICAgIHJldHVybiAqY2FsbGVlKCktPm1hcmtlZEJsb2NrKCkudm0oKTsKKyAgICByZXR1cm4gKmNh
bGxlZS0+bWFya2VkQmxvY2soKS52bSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNywxMCBAQCBwdWJsaWM6CiAK
ICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVl
KCk7CisgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKworICAgICAgICBKU0NlbGwqIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwogICAgICAgICBpZiAoY2FsbGVlICE9IG1f
dGFyZ2V0Q2FsbGVlKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7
CiAKQEAgLTI3OSw3ICsyODIsMTAgQEAgcHVibGljOgogCiAgICAgU3RhY2tWaXNpdG9yOjpTdGF0
dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewotICAgICAg
ICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAoIXZpc2l0
b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
Q29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKS5h
c0NlbGwoKTsKIAogICAgICAgICBpZiAoY2FsbGVlICYmIGNhbGxlZS0+aW5oZXJpdHMoKmNhbGxl
ZS0+dm0oKSwgSlNCb3VuZEZ1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQy
LDEwIEBAIGludHB0cl90IFN0YWNrRnJhbWU6OnNvdXJjZUlEKCkgY29uc3QKIAogU3RyaW5nIFN0
YWNrRnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiB7CisgICAgaWYgKG1faXNXYXNtRnJhbWUpCisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CisKICAgICBpZiAoIW1f
Y29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChtX2NhbGxlZSAmJiBtX2NhbGxlZS0+aXNBbnlXYXNt
Q2FsbGVlKCptX2NhbGxlZS0+dm0oKSkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJbd2FzbSBjb2RlXSIpOwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJbbmF0aXZlIGNv
ZGVdIik7CiAgICAgfQogCkBAIC01Niw2ICs1Nyw5IEBAIFN0cmluZyBTdGFja0ZyYW1lOjpzb3Vy
Y2VVUkwoKSBjb25zdAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkg
Y29uc3QKIHsKKyAgICBpZiAobV9pc1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiPHdhc20+Iik7CisKICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgICAgICBjYXNlIEV2YWxDb2RlOgpAQCAt
NzIsNyArNzYsNyBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkgCiAg
ICAgfQogICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChtX2NhbGxlZSkgewotICAgICAgICBpZiAo
bV9jYWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQorICAgICAgICBpZiAo
aXNXZWJBc3NlbWJseVRvSlNDYWxsZWUobV9jYWxsZWUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiPHdhc20+Iik7CiAgICAgICAgIGlmIChtX2NhbGxlZS0+aXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIG5hbWUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUodm0sIGpz
Q2FzdDxKU09iamVjdCo+KG1fY2FsbGVlLmdldCgpKSkuaW1wbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkocmV2aXNpb24gMjE0ODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw4IEBAIGNsYXNzIEpTT2JqZWN0OwogCiBjbGFzcyBTdGFja0ZyYW1lIHsK
IHB1YmxpYzoKKyAgICBTdGFja0ZyYW1lKCkgPSBkZWZhdWx0OworCiAgICAgU3RhY2tGcmFtZShW
TSYgdm0sIEpTQ2VsbCogY2FsbGVlKQogICAgICAgICA6IG1fY2FsbGVlKHZtLCBjYWxsZWUpCiAg
ICAgeyB9CkBAIC00NSw2ICs0NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ieXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCkKICAgICB7IH0KIAorICAgIHN0YXRpYyBTdGFja0ZyYW1lIHdh
c20oKQorICAgIHsKKyAgICAgICAgU3RhY2tGcmFtZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2lzV2FzbUZyYW1lID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAg
ICBib29sIGhhc0xpbmVBbmRDb2x1bW5JbmZvKCkgY29uc3QgeyByZXR1cm4gISFtX2NvZGVCbG9j
azsgfQogICAgIAogICAgIHZvaWQgY29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUs
IHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwpAQCAtNjUsNyArNzQsNyBAQCBwcml2YXRlOgogICAg
IFN0cm9uZzxKU0NlbGw+IG1fY2FsbGVlIHsgfTsKICAgICBTdHJvbmc8Q29kZUJsb2NrPiBtX2Nv
ZGVCbG9jayB7IH07CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldCB7IFVJTlRfTUFYIH07
Ci0gICAgCisgICAgYm9vbCBtX2lzV2FzbUZyYW1lIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
UHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0gICAgd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CisgICAgLy8gRklYTUU6IHJlbW92ZQorICAgIC8vd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlLnNldCgqdGhp
cywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAjZW5kaWYKQEAgLTYyMyw3ICs2MjQsNyBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9ICp0aGlzOwogICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0ganNEeW5hbWljQ2Fz
dDxFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOwogICAgIGlmICghZXhjZXB0aW9uKQogICAg
ICAgICBleGNlcHRpb24gPSBFeGNlcHRpb246OmNyZWF0ZSgqdGhpcywgdGhyb3duVmFsdWUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAgICBWYWx1ZSogY29k
ZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKICAgICAg
ICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSk7CiAgICAgICAgIFZhbHVl
KiBqdW1wRGVzdGluYXRpb24gPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9j
aywgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIobV9p
bmZvLmludGVybmFsRnVuY3Rpb25Db3VudCgpLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgICAg
ICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5jdGlvbkluZGV4KSk7CiAg
ICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1
cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5U
eXBlKSwKICAgICAgICAgICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAg
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMTQ4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87
CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBjbGFz
cyBKU1Byb21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDIxNDgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMyArMzksMTcgQEAgdm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhj
b25zdCBGdW5jdAogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsg
aW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyAr
K2ludGVybmFsRnVuY3Rpb25JbmRleCkgewogICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhd
LmdldCgpOwogCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5q
c1RvV2FzbUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2Fs
bGVlKTsKKyAgICAgICAgYXV0byB3cmFwQ2FsbGVlID0gW10gKFdlYkFzc2VtYmx5Q2FsbGVlKiBj
YWxsZWUpIC0+IHZvaWQqIHsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiAxKTsKKyAgICAgICAgfTsKIAotICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNz
ZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2lu
dCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndh
c21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgUmVm
PFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpXZWJB
c3NlbWJseUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2lu
dCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpz
VG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCB3cmFwQ2FsbGVlKGpzRW50cnlwb2ludENhbGxlZS5w
dHIoKSkpOwogCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwganNFbnRy
eXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIFJlZjxXYXNtOjpX
ZWJBc3NlbWJseUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpXZWJBc3NlbWJs
eUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwgd3JhcENhbGxlZSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOworCisg
ICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShqc0VudHJ5cG9p
bnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzIgKzI4
LDE2IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCi1uYW1lc3BhY2UgSlND
IHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxw
dHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKLQotSlNX
ZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCi0gICAgOiBCYXNl
KHZtLCB2bS53ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKLXsgfQotCi12b2lkIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAg
bV9lbnRyeXBvaW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKLSAgICBXYXNtOjpyZWdpc3RlckNv
ZGUobV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK1dlYkFzc2VtYmx5Q2FsbGVlOjpXZWJBc3NlbWJseUNhbGxlZShFbnRy
eXBvaW50JiYgZW50cnlwb2ludCkKKyAgICA6IG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9p
bnQpKQogewotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5yZWdpc3RlckNvZGUo
dGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24t
PmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKLSAgICB0aGlzT2JqZWN0LT5K
U1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOworICAgIHJlZ2lzdGVy
Q29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDUgKzI3LDMyIEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJS
ZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAot
bmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFz
cyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBXZWJBc3NlbWJs
eUNhbGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJBc3NlbWJseUNhbGxlZT4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50KQorICAgIHN0YXRpYyBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+IGNyZWF0ZShXYXNtOjpF
bnRyeXBvaW50JiYgZW50cnlwb2ludCkKICAgICB7Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIGNhbGxlZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q2FsbGVlKHZtKTsKLSAgICAgICAgY2FsbGVlLT5m
aW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShlbnRyeXBvaW50KSk7Ci0gICAgICAgIHJldHVybiBj
YWxsZWU7CisgICAgICAgIFdlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBuZXcgV2ViQXNzZW1i
bHlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
Y2FsbGVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkg
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLQotICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLQogICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAKICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBXZWJBc3NlbWJseUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYpOwogCiAgICAgV2FzbTo6
RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDggKzQ3LDcgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNv
ZAogICAgIG1fbW9kdWxlLnNldCh2bSwgdGhpcywgb3duZXIpOwogICAgIEFTU0VSVCghbW9kdWxl
KCktPmNvZGVCbG9jayhtb2RlKSk7CiAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbW9k
ZSwgdGhpcyk7Ci0KLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKKyAgICBtX2NhbGxl
ZXMucmVzaXplKG1fY2FsbGVlQ291bnQgKiAyKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjppbml0aWFsaXplKCkKQEAgLTc0LDExICs3MywxMSBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmluaXRpYWxpemUoCiAKICAgICAvLyBUaGUgY29kZSBhIG1vZHVsZSBlbWl0
cyB0byBjYWxsIGludG8gSlMgcmVsaWVzIG9uIHVzIHRvIHNldCB0aGlzIHVwLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IGltcG9ydFdhc21Ub0pTU3R1YihtX2NhbGxlZUNvdW50LCBpKSA9IG1fd2FzbUV4aXRTdHVic1tp
XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgaW1wb3J0V2Fz
bVRvSlNTdHViKGkpID0gbV93YXNtRXhpdFN0dWJzW2ldLndhc21Ub0pzLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwogCi0gICAgcGxhbigpLmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgc2V0
SlNFbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsK
LSAgICAgICAgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50
cnlwb2ludENhbGxlZSk7CisgICAgcGxhbigpLmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIFJlZjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4mJiBqc0VudHJ5cG9p
bnRDYWxsZWUsIFJlZjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENh
bGxlZSkgeworICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoY2FsbGVlSW5kZXgsIFdURk1v
dmUoanNFbnRyeXBvaW50Q2FsbGVlKSk7CisgICAgICAgIHNldFdhc21FbnRyeXBvaW50Q2FsbGVl
KGNhbGxlZUluZGV4LCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfSk7CiAK
ICAgICBtX3BsYW4gPSBudWxscHRyOwpAQCAtMTE4LDggKzExNyw2IEBAIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6dmlzaXRDaGlsZHIKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1
bGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNv
dW50ICogMjsgaSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxsZWVz
KClbaV0pOwogCiAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2Jq
ZWN0LT5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2
aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUg
IlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNp
bmNsdWRlIDx3dGYvQmFnLmg+CkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBvd25lciwgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCBSZWY8V2FzbTo6UGxhbj4mJiBwbGFu
LCB1bnNpZ25lZCBjYWxsZWVDb3VudCwgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCkKICAg
ICB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50
LCBmdW5jdGlvbkltcG9ydENvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVy
LCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBjYWxsZWVDb3VudCk7CisgICAgICAgIGF1dG8qIHJlc3Vs
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZt
LmhlYXAsIGFsbG9jYXRpb25TaXplKGZ1bmN0aW9uSW1wb3J0Q291bnQpKSkgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1vdmUocGxhbiksIGNhbGxlZUNvdW50KTsK
ICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpAQCAtNzUsNDcgKzc2LDQzIEBAIHB1YmxpYzoKICAgICBTdHJpbmcmIGVycm9y
TWVzc2FnZSgpIHsgQVNTRVJUKCFydW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOyB9
CiAgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5KikgY29uc3Q7CiAKLSAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBSZWZQdHI8V2FzbTo6V2Vi
QXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAg
IHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBv
cnRDb3VudCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVl
Q291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBSZWZQdHI8V2FzbTo6V2Vi
QXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAg
ICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbklt
cG9ydENvdW50KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxs
ZWVDb3VudCk7Ci0gICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxl
ZUNvdW50XS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1f
Y2FsbGVlQ291bnRdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2Fs
bGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNh
bGxlZSkKKyAgICB2b2lkIHNldEpTRW50cnlwb2ludENhbGxlZSh1bnNpZ25lZCBjYWxsZWVJbmRl
eCwgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBjYWxsZWUpCiAgICAgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBj
YWxsZWVzKClbY2FsbGVlSW5kZXhdLnNldCh2bSwgdGhpcywgY2FsbGVlKTsKKyAgICAgICAgbV9j
YWxsZWVzW2NhbGxlZUluZGV4XSA9IGNhbGxlZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFdhc21F
bnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGNhbGxlZSkKKyAgICB2b2lkIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IGNhbGxlZSkK
ICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3Vu
dCk7Ci0gICAgICAgIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLnNldCh2
bSwgdGhpcywgY2FsbGVlKTsKKyAgICAgICAgbV9jYWxsZWVzW2NhbGxlZUluZGV4ICsgbV9jYWxs
ZWVDb3VudF0gPSBjYWxsZWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRP
ZkNhbGxlZXMoKSk7IH0KLQogICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5z
aWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbXBvcnRJ
bmRleCA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCkpOwogICAgICAgICByZXR1cm4gbV93YXNtRXhp
dFN0dWJzW2ltcG9ydEluZGV4XS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHVi
KHVuc2lnbmVkIGNhbGxlZUNvdW50LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mQ2FsbGVlcygpCi0gICAgICAgICAgICAr
IChzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIGNhbGxlZUNvdW50
ICogMikKLSAgICAgICAgICAgICsgKHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleCk7CisgICAg
ICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0
SW5kZXg7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTI1LDIxICsxMjIsMTkgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZDYWxsZWVzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0U3R1
YnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxz
aXplb2Yodm9pZCopPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgY2FsbGVlQ291bnQsIHVu
c2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSh1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9mZnNldE9mQ2FsbGVlcygpCi0gICAgICAgICAgICArIChzaXplb2YoV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+KSAqIGNhbGxlZUNvdW50ICogMikKLSAgICAgICAgICAgICsgKHNp
emVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50KTsKKyAgICAgICAgcmV0dXJuIG9mZnNl
dE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50Owog
ICAgIH0KIAotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgY2FsbGVlQ291
bnQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIo
dW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2Fz
dDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21U
b0pTU3R1YihjYWxsZWVDb3VudCwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3
aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBv
cnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpKTsKICAgICB9CiAKICAgICBjbGFzcyBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7CkBA
IC0xNTAsNiArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1f
dW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsK
KyAgICBWZWN0b3I8UmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4gbV9jYWxsZWVzOwog
ICAgIC8vIFRoZSBwbGFuIHRoYXQgaXMgY29tcGlsaW5nIHRoaXMgY29kZSBibG9jay4KICAgICBS
ZWZQdHI8V2FzbTo6UGxhbj4gbV9wbGFuOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xh
c3NJbmZvIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
LlJ1bnRpbWVFcnJvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcikgfTsKKwogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciog
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcj4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iodm0sIHN0cnVj
dHVyZSk7CkBAIC00Niw5ICs0OCw2IEBAIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OkpTV2Vi
QXNzZW1ibHkKIHsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3I6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIsICZCYXNlOjpzX2luZm8s
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcikgfTsKLQot
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAK
ICAgICAvLyBOb3RlOiB3ZSBzcGVjaWZpY2FsbHkgdXNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9u
IGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAg
Ly8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5
IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93Ci0gICAgLy8gaGFuZGxlciBt
aWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNz
ZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKKyAgICAvLyBoYW5kbGVyIG1pZ2h0IHJlYWQgdGhl
IGdsb2JhbCBvYmplY3QgZnJvbSB0aGUgY2FsbGVlLiBUaGUgV2ViQXNzZW1ibHlDYWxsZWUgZG9l
c24ndCBoYXZlIGEKICAgICAvLyBnbG9iYWwgb2JqZWN0LCBidXQgdGhlIFdlYkFzc2VtYmx5RnVu
Y3Rpb24gZG9lcy4KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBwcm90
b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJn
Q291bnQsIHJlbWFpbmluZ0FyZ3MpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsK
IH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlG
dW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBq
c0VudHJ5cG9pbnQsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBu
YW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlGdW5jdGlvblN0cnVjdHVyZSgpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIFN0cnVjdHVyZSogV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhXZWJBc3NlbWJseUZ1bmN0aW9u
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9u
OjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVu
Y3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIHdh
c21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKICAgICA6
IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgICwgbV93YXNtRW50cnlQb2lu
dENvZGUod2FzbUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSkKICAgICAsIG1fc2lnbmF0dXJlSW5k
ZXgoc2lnbmF0dXJlSW5kZXgpCkBAIC0xODYsMTggKzE4NiwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0g
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc0VudHJ5cG9pbnQpOwotICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2FzbUVudHJ5cG9pbnQpOwogfQogCi12b2lkIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpCit2b2lkIFdlYkFzc2VtYmx5
RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQs
IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0
YW5jZSk7CiAgICAgQVNTRVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7Ci0gICAg
bV9qc0VudHJ5cG9pbnQuc2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOwotICAgIG1fd2FzbUVu
dHJ5cG9pbnQuc2V0KHZtLCB0aGlzLCB3YXNtRW50cnlwb2ludCk7CisgICAgbV9qc0VudHJ5cG9p
bnQgPSBqc0VudHJ5cG9pbnQ7CisgICAgbV93YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50
OwogICAgIEFTU0VSVChtX3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkgPT0gbV93YXNtRW50
cnlQb2ludENvZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdh
c206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQpAQCAtNjMsMTUgKzYzLDE3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSoganNF
bnRyeXBvaW50LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpOwogCiBw
cml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7Cisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIHZvaWQq
IG1fd2FzbUVudHJ5UG9pbnRDb2RlOyAvLyBDYWNoZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0aGUg
d2FzbSAtPiB3YXNtIHN0dWIgdG8gZG8gYSBzaW5nbGUgbG9hZCBhbmQganVtcCBpbnN0ZWFkIG9m
IGhhdmluZyBkZXBlbmRlbnQgbG9hZHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlD
YWxsZWU+IG1fanNFbnRyeXBvaW50OwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2Fs
bGVlPiBtX3dhc21FbnRyeXBvaW50OworICAgIC8vIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0
byB0aGVzZSwgc2luY2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBvdXIKKyAgICAvLyBpbnN0YW5j
ZSwgd2hpY2gga2VlcHMgYWxpdmUgdGhlIENvZGVCbG9jaywgd2hpY2ggb3ducyB0aGlzIHBvaW50
ZXIuCisgICAgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIG1fanNFbnRyeXBvaW50OworICAgIFdh
c206OldlYkFzc2VtYmx5Q2FsbGVlKiBtX3dhc21FbnRyeXBvaW50OwogICAgIC8vIEl0J3Mgc2Fm
ZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSBy
ZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9k
dWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1
YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTEgKzEy
NSwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAg
ICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFwcGVu
ZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4K
LSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhw
LmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8V2Fz
bTo6V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENh
bGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBleHAu
ZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBvaW50
Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRW
YWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
OTYsOSArMTk2LDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwog
ICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVu
Y3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5j
ZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICAgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgUmVmUHRyPFdh
c206OldlYkFzc2VtYmx5Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25J
bmRleFNwYWNlKTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0
KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAg
ICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yNzAsMTUgKzI3MCwxNSBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpldmFsdWF0CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIFJl
ZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJs
b2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4gd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhw
b3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAg
ICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3
LyBpbmRleCAwLgogICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5l
eHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNF
bnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBqc0VudHJ5
cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJ
bmRleCk7CiAKICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5k
ZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306143</attachid>
            <date>2017-04-03 17:11:20 -0700</date>
            <delta_ts>2017-04-03 18:38:46 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>79165</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMTUwMiw3ICsxNTAy
LDcgQEAKICAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOiBBZGRlZC4KICAgICAgICAgKEpT
Qzo6V2FzbTo6V29ya2xpc3Q6Om5leHRUaWNrZXQpOgogICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Ci0gICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmg6CisgICAgICAgIGUgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg6
CiAgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKICAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CiAg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUpOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBib3goRXhlY1N0YXRlKiBleGVjLCBWTSYgCiB9CiAKIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTgyLgotc3RhdGljIEpTVmFsdWUg
Y2FsbFdhc21GdW5jdGlvbihWTSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykK
K3N0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgY29uc3Qg
QXJnTGlzdCYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudDsKICAgICBp
bnQgYXJnQ291bnQgPSAxOwpAQCAtMzIwMiwxNSArMzIwMiwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgaWYgKHBsYW4tPmludGVybmFsRnVuY3Rpb25D
b3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBjYWxsZWVzOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtlZXBBbGl2
ZTsKKyAgICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4gY2FsbGVlczsKKyAg
ICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4ga2VlcEFsaXZlOwogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7CiAgICAgICAgIHBsYW4tPmlu
aXRpYWxpemVDYWxsZWVzKAotICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIGpzRW50cnlwb2ludENh
bGxlZSwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVl
KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxs
ZWVJbmRleCAtIDEgPT0gbGFzdEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBl
bmQoanNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgICAgICBrZWVwQWxpdmUuYXBwZW5k
KHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChX
VEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgIGtlZXBBbGl2ZS5h
cHBlbmQoV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIGxh
c3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzIzOCw3
ICszMjM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAg
ICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0OwogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgICAg
ICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94
ZWRBcmdzKTsKKyAgICAgICAgICAgICAgICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigm
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlc1tpXS5wdHIoKSwgYm94ZWRB
cmdzKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2
bSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJl
Zi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAg
ICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBhbnkg
ZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJhbWUs
IGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAg
ICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAgICAgICAgICAg
IGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYgdmlzaXRvci0+
aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1f
YnVpbGRlcjsKICAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBAIC0yODEsNyAr
MjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxp
bmVOdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNhbGxlZSkKKyAg
ICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdD
YXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk3LDYg
KzE0OTcsNyBAQAogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0Yw
MDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC00MDQ0LDYgKzQwNDUsNyBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAz
MDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE0MUU1RDc5
OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY1QzIxNTFF
NUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTZEQUEyQTFFODlDQ0Q2
MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxsZWVCaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NzM4LDYgKzU3NDAsNyBAQAogCQkJCTBGNTVGMEYxMTREMTA2MzYw
MEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2
NDkgLyogQWJzdHJhY3RQQy5oICovLAogCQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBD
YWNoZWRDYWxsLmggKi8sCisJCQkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLywKIAkJCQkxNDI5RDhEQjBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCAq
LywKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJ
QTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAqLywKQEAgLTg4
NjIsNiArODg2NSw3IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJ
Q0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUg
LyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFC
RkJFNTYxMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
OTZEQUEyQjFFODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3
LDcgKzY4Nyw3IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUludGVybmFsKEMKIAog
dm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0mIHZtID0gbV92bTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAobV9pc1BhdXNlZCkK
QEAgLTcwNiwxMSArNzA2LDExIEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICBwYXVzZU5vdyB8PSAobV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENh
bGxGcmFtZSk7CiAKICAgICBib29sIGRpZFBhdXNlRm9yU3RlcCA9IHBhdXNlTm93OwotICAgIGJv
b2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOwogCiAgICAgQnJlYWtwb2ludCBicmVha3BvaW50
OwotICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlv
bkZvckNhbGxGcmFtZShtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIHBhdXNlTm93IHw9IGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3Np
dGlvbkZvckNhbGxGcmFtZSh2bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBib29sIGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIHBhdXNlTm93IHw9IGRpZEhpdEJyZWFrcG9pbnQ7CiAgICAgbV9sYXN0RXhlY3V0
ZWRMaW5lID0gcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwogICAgIGlmICghcGF1c2VO
b3cpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpw
YXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAgICAgLy8gcmVzZXRpbmcgdGhlIHBhdXNlIHN0YXRl
IGJlZm9yZSBleGVjdXRpbmcgYW55IGJyZWFrcG9pbnQgYWN0aW9ucy4KICAgICBUZW1wb3JhcnlQ
YXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogdm1F
bnRyeUdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KHZtKTsKIAogICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CiAgICAgICAg
IGhhbmRsZUJyZWFrcG9pbnRIaXQodm1FbnRyeUdsb2JhbE9iamVjdCwgYnJlYWtwb2ludCk7CkBA
IC05MTYsNyArOTE2LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxG
cgogRGVidWdnZXJDYWxsRnJhbWUmIERlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUo
KQogewogICAgIGlmICghbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpCi0gICAgICAgIG1fY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShtX2N1cnJl
bnRDYWxsRnJhbWUpOworICAgICAgICBtX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVn
Z2VyQ2FsbEZyYW1lOjpjcmVhdGUobV92bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICByZXR1
cm4gKm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE2ICs2MCwxNiBAQCBwcml2YXRlOgog
ICAgIG11dGFibGUgdW5zaWduZWQgbV9jb2x1bW47CiB9OwogCi1SZWY8RGVidWdnZXJDYWxsRnJh
bWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitSZWY8
RGVidWdnZXJDYWxsRnJhbWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lID09IGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKSB7CisgICAgaWYgKFVO
TElLRUxZKCFjYWxsRnJhbWUtPmNhbGxlZSgpLmlzV2FzbSgpICYmIGNhbGxGcmFtZSA9PSBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSkgewogICAgICAgICBT
aGFkb3dDaGlja2VuOjpGcmFtZSBlbXB0eUZyYW1lOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZW1wdHlGcmFtZS5pc1RhaWxEZWxldGVkKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBlbXB0eUZyYW1lKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKHZtLCBjYWxsRnJhbWUsIGVtcHR5RnJh
bWUpKTsKICAgICB9CiAKICAgICBWZWN0b3I8U2hhZG93Q2hpY2tlbjo6RnJhbWU+IGZyYW1lczsK
LSAgICBjYWxsRnJhbWUtPnZtKCkuc2hhZG93Q2hpY2tlbigpLml0ZXJhdGUoY2FsbEZyYW1lLT52
bSgpLCBjYWxsRnJhbWUsIFsmXSAoY29uc3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmIGZyYW1lKSAt
PiBib29sIHsKKyAgICBjYWxsRnJhbWUtPnZtKCkuc2hhZG93Q2hpY2tlbigpLml0ZXJhdGUodm0s
IGNhbGxGcmFtZSwgWyZdIChjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpIC0+IGJv
b2wgewogICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfSk7CkBAIC03OCwyNCArNzgsMjQgQEAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1
Z2dlckNhbGxGcmFtZQogICAgIEFTU0VSVCghZnJhbWVzWzBdLmlzVGFpbERlbGV0ZWQpOyAvLyBU
aGUgdG9wIGZyYW1lIHNob3VsZCBuZXZlciBiZSB0YWlsIGRlbGV0ZWQuCiAKICAgICBSZWZQdHI8
RGVidWdnZXJDYWxsRnJhbWU+IGN1cnJlbnRQYXJlbnQgPSBudWxscHRyOwotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgRXhlY1N0YXRlKiBleGVjID0gY2FsbEZyYW1lLT53YXNtQXdhcmVMZXhpY2FsR2xvYmFs
T2JqZWN0KHZtKS0+Z2xvYmFsRXhlYygpOwogICAgIC8vIFRoaXMgd2Fsa3MgdGhlIHN0YWNrIGZy
b20gdGhlIGVudHJ5IHN0YWNrIGZyYW1lIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IGZyYW1lcy5zaXplKCk7IGktLTsgKSB7CiAgICAgICAgIGNvbnN0IFNo
YWRvd0NoaWNrZW46OkZyYW1lJiBmcmFtZSA9IGZyYW1lc1tpXTsKICAgICAgICAgaWYgKCFmcmFt
ZS5pc1RhaWxEZWxldGVkKQogICAgICAgICAgICAgZXhlYyA9IGZyYW1lLmZyYW1lOwotICAgICAg
ICBSZWY8RGVidWdnZXJDYWxsRnJhbWU+IGN1cnJlbnRGcmFtZSA9IGFkb3B0UmVmKCpuZXcgRGVi
dWdnZXJDYWxsRnJhbWUoZXhlYywgZnJhbWUpKTsKKyAgICAgICAgUmVmPERlYnVnZ2VyQ2FsbEZy
YW1lPiBjdXJyZW50RnJhbWUgPSBhZG9wdFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKHZtLCBl
eGVjLCBmcmFtZSkpOwogICAgICAgICBjdXJyZW50RnJhbWUtPm1fY2FsbGVyID0gY3VycmVudFBh
cmVudDsKICAgICAgICAgY3VycmVudFBhcmVudCA9IFdURk1vdmUoY3VycmVudEZyYW1lKTsKICAg
ICB9CiAgICAgcmV0dXJuICpjdXJyZW50UGFyZW50OwogfQogCi1EZWJ1Z2dlckNhbGxGcmFtZTo6
RGVidWdnZXJDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFNoYWRvd0NoaWNr
ZW46OkZyYW1lJiBmcmFtZSkKK0RlYnVnZ2VyQ2FsbEZyYW1lOjpEZWJ1Z2dlckNhbGxGcmFtZShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYg
ZnJhbWUpCiAgICAgOiBtX3ZhbGlkTWFjaGluZUZyYW1lKGNhbGxGcmFtZSkKICAgICAsIG1fc2hh
ZG93Q2hpY2tlbkZyYW1lKGZyYW1lKQogewotICAgIG1fcG9zaXRpb24gPSBjdXJyZW50UG9zaXRp
b24oKTsKKyAgICBtX3Bvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uKHZtKTsKIH0KIAogUmVmUHRy
PERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y2FsbGVyRnJhbWUoKQpAQCAt
Mjg0LDcgKzI4NCw3IEBAIHZvaWQgRGVidWdnZXJDYWxsRnJhbWU6OmludmFsaWRhdGUoKQogICAg
IH0KIH0KIAotVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpjdXJyZW50UG9zaXRpb24o
KQorVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpjdXJyZW50UG9zaXRpb24oVk0mIHZt
KQogewogICAgIGlmICghbV92YWxpZE1hY2hpbmVGcmFtZSkKICAgICAgICAgcmV0dXJuIFRleHRQ
b3NpdGlvbigpOwpAQCAtMjk3LDEzICsyOTcsMTMgQEAgVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpjdXJyZW50UAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHBvc2l0aW9u
Rm9yQ2FsbEZyYW1lKG1fdmFsaWRNYWNoaW5lRnJhbWUpOworICAgIHJldHVybiBwb3NpdGlvbkZv
ckNhbGxGcmFtZSh2bSwgbV92YWxpZE1hY2hpbmVGcmFtZSk7CiB9CiAKLVRleHRQb3NpdGlvbiBE
ZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25Gb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCitUZXh0UG9zaXRpb24gRGVidWdnZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1l
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgTGluZUFuZENvbHVtbkZ1bmN0
b3IgZnVuY3RvcjsKLSAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgU3RhY2tW
aXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgcmV0dXJuIFRleHRQ
b3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoZnVuY3Rvci5saW5lKCkpLCBP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoZnVuY3Rvci5jb2x1bW4oKSkpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxs
RnJhbWUuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAg
Y2xhc3MgRGVidWdnZXJDYWxsRnJhbWUgOiBwdWJsaWMgUmVmQ291bgogcHVibGljOgogICAgIGVu
dW0gVHlwZSB7IFByb2dyYW1UeXBlLCBGdW5jdGlvblR5cGUgfTsKIAotICAgIHN0YXRpYyBSZWY8
RGVidWdnZXJDYWxsRnJhbWU+IGNyZWF0ZShDYWxsRnJhbWUqKTsKKyAgICBzdGF0aWMgUmVmPERl
YnVnZ2VyQ2FsbEZyYW1lPiBjcmVhdGUoVk0mLCBDYWxsRnJhbWUqKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIFJlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gY2FsbGVyRnJhbWUoKTsKICAgICBF
eGVjU3RhdGUqIGdsb2JhbEV4ZWMoKTsKQEAgLTY5LDE0ICs2OSwxNCBAQCBwdWJsaWM6CiAgICAg
Ly8gVGhlIGZvbGxvd2luZyBhcmUgb25seSBwdWJsaWMgZm9yIHRoZSBEZWJ1Z2dlcidzIHVzZSBv
bmx5LiBUaGV5IHdpbGwgYmUKICAgICAvLyBtYWRlIHByaXZhdGUgc29vbi4gT3RoZXIgY2xpZW50
cyBzaG91bGQgbm90IHVzZSB0aGVzZS4KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQb3Np
dGlvbiBjdXJyZW50UG9zaXRpb24oKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGV4
dFBvc2l0aW9uIHBvc2l0aW9uRm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFRleHRQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24oVk0mKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgVGV4dFBvc2l0aW9uIHBvc2l0aW9uRm9yQ2FsbEZyYW1lKFZNJiwg
Q2FsbEZyYW1lKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNvdXJjZUlEIHNvdXJj
ZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwogCiAgICAgYm9vbCBpc1RhaWxEZWxldGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFkb3dDaGlja2VuRnJhbWUuaXNUYWlsRGVsZXRlZDsgfQogCiBw
cml2YXRlOgotICAgIERlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSosIGNvbnN0IFNoYWRvd0No
aWNrZW46OkZyYW1lJik7CisgICAgRGVidWdnZXJDYWxsRnJhbWUoVk0mLCBDYWxsRnJhbWUqLCBj
b25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYpOwogCiAgICAgQ2FsbEZyYW1lKiBtX3ZhbGlkTWFj
aGluZUZyYW1lOwogICAgIFJlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jYWxsZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWTUVudHJ5
U2NvcGUuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE4NSw3ICsxODYsOCBAQCBSZWdp
c3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoCiAKIEpTR2xvYmFsT2JqZWN0KiBD
YWxsRnJhbWU6OnZtRW50cnlHbG9iYWxPYmplY3QoKQogewotICAgIGlmIChjYWxsZWUoKS0+aXNP
YmplY3QoKSkgeyAKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAg
aWYgKGNhbGxlZSgpLmFzQ2VsbCgpLT5pc09iamVjdCgpKSB7IAogICAgICAgICBpZiAodGhpcyA9
PSBsZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkKICAgICAgICAgICAgIHJldHVy
biBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgfQpAQCAtMTk3LDYgKzE5OSwyOCBAQCBKU0ds
b2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsCiAgICAgcmV0dXJuIHZtKCkuZW50
cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKK0pTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6
OnZtRW50cnlHbG9iYWxPYmplY3QoVk0mIHZtKQoreworICAgIGlmICghY2FsbGVlKCkuaXNXYXNt
KCkgJiYgY2FsbGVlKCkuYXNDZWxsKCktPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHRoaXMg
PT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpCisgICAgICAgICAgICByZXR1
cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIH0KKworICAgIC8vIElmIHdlJ3JlIG5vdCBh
biBvYmplY3QsIHdlJ3JlIHdhc20sIGFuZCB0aGVyZWZvcmUgd2UncmUgZXhlY3V0aW5nIGNvZGUg
YW5kIHRoZSBiZWxvdyBpcyBzYWZlLgorCisgICAgLy8gRm9yIGFueSBFeGVjU3RhdGUgdGhhdCdz
IG5vdCBhIGdsb2JhbEV4ZWMsIHRoZSAKKyAgICAvLyBkeW5hbWljIGdsb2JhbCBvYmplY3QgbXVz
dCBiZSBzZXQgc2luY2UgY29kZSBpcyBydW5uaW5nCisgICAgQVNTRVJUKHZtLmVudHJ5U2NvcGUp
OworICAgIHJldHVybiB2bS5lbnRyeVNjb3BlLT5nbG9iYWxPYmplY3QoKTsKK30KKworSlNHbG9i
YWxPYmplY3QqIENhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdChWTSYgdm0p
Cit7CisgICAgaWYgKCFjYWxsZWUoKS5pc1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGxleGljYWxH
bG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxP
YmplY3QoKTsKK30KKwogQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZNRW50cnlG
cmFtZSomIGN1cnJWTUVudHJ5RnJhbWUpCiB7CiAgICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5
RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZyYW1lKSB7CkBAIC0yMTksOSArMjQzLDExIEBAIFNVUFBS
RVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnVuc2EKIAogU291cmNlT3JpZ2luIENhbGxG
cmFtZTo6Y2FsbGVyU291cmNlT3JpZ2luKCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUo
KS5pc0NlbGwoKSk7CisgICAgVk0qIHZtID0gJnRoaXMtPnZtKCk7CiAgICAgU291cmNlT3JpZ2lu
IHNvdXJjZU9yaWdpbjsKICAgICBib29sIGhhdmVTa2lwcGVkRmlyc3RGcmFtZSA9IGZhbHNlOwot
ICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQodGhpcywgWyZdKFN0YWNrVmlzaXRvciYgdmlzaXRvcikg
eworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQodGhpcywgdm0sIFsmXShTdGFja1Zpc2l0b3ImIHZp
c2l0b3IpIHsKICAgICAgICAgaWYgKCFzdGQ6OmV4Y2hhbmdlKGhhdmVTa2lwcGVkRmlyc3RGcmFt
ZSwgdHJ1ZSkpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpTdGF0dXM6OkNvbnRp
bnVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQWJzdHJhY3RQQy5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rl
ci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgpAQCAtODYsOSArODcsMTcgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBoZWFkZXJT
aXplSW5SZWdpc3RlcnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICsgMTsKIAotICAg
ICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmNhbGxlZV0uanNWYWx1ZSgpOyB9Ci0gICAgICAgIEpTT2JqZWN0KiBqc0NhbGxlZSgp
IGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5vYmplY3QoKTsgfQot
ICAgICAgICBKU0NlbGwqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlXS51bmJveGVkQ2VsbCgpOyB9CisgICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1
ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbGVlKCkuaXNXYXNt
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1Zh
bHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgSlNPYmplY3QqIGpzQ2FsbGVlKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLm9iamVjdCgpOworICAgICAg
ICB9CisgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0
cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9pbnRlcigpKTsgfQogICAgICAgICBTVVBQ
UkVTU19BU0FOIEpTVmFsdWUgdW5zYWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxs
RnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVKU1ZhbHVlKCk7IH0KICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9ja10uUmVnaXN0ZXI6OmNvZGVCbG9jaygpOyB9CiAgICAgICAgIENvZGVCbG9jayoqIGFkZHJl
c3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxvY2sqKj4o
dGhpcyArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7IH0KQEAgLTEwMCw4ICsxMDksMTUgQEAg
bmFtZXNwYWNlIEpTQyAgewogICAgICAgICB9CiAKICAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBp
biB3aGljaCBleGVjdXRpb24gYmVnYW4uCisgICAgICAgIC8vIFRoaXMgaXMgbm90IHNhZmUgdG8g
Y2FsbCBmcm9tIGEgV2FzbSBmcmFtZS4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNHbG9i
YWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoKTsKIAorICAgICAgICAvLyBHbG9iYWwgb2Jq
ZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KKyAgICAgICAgLy8gVGhpcyBpcyBzYWZlIHRv
IGNhbGwgZnJvbSBhIFdhc20gZnJhbWUuCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KFZNJik7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIHdhc21Bd2FyZUxl
eGljYWxHbG9iYWxPYmplY3QoVk0mKTsKKwogICAgICAgICAvLyBHbG9iYWwgb2JqZWN0IGluIHdo
aWNoIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2FzIGRlZmluZWQuCiAgICAgICAgIC8v
IERpZmZlcnMgZnJvbSB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxz
IGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KCkgY29uc3Q7CkBAIC0yNTcsOSArMjczLDE4IEBAIG5hbWVzcGFjZSBK
U0MgIHsKICAgICAgICAgLy8gICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJikgY29uc3Q7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBpbXBy
b3Blci4gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdlIGNhbiBjYWxsIGl0IHdpdGggYSBudWxs
CiAgICAgICAgIC8vIHJlY2VpdmVyLiBXZSBzaG91bGQgYWx3YXlzIGJlIHVzaW5nIFN0YWNrVmlz
aXRvciBkaXJlY3RseS4KKyAgICAgICAgLy8gSXQncyBvbmx5IHZhbGlkIHRvIGNhbGwgdGhpcyBm
cm9tIGEgbm9uLXdhc20gdG9wIGZyYW1lLgogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVuY3Rvcj4odGhpcywgZnVuY3Rvcik7Cisg
ICAgICAgICAgICBWTSogdm07CisgICAgICAgICAgICB2b2lkKiBwbGVhc2VGSVhNRSA9IHRoaXM7
CisgICAgICAgICAgICBpZiAoISFwbGVhc2VGSVhNRSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxlZSgpLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICB2bSA9ICZ0aGlz
LT52bSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdm0gPSBudWxscHRy
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKCkuaXNDZWxsKCkpOworICAgICAg
ICAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdDxGdW5jdG9yPih0aGlzLCB2bSwgZnVuY3Rvcik7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVCaXRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIFdl
YkFzc2VtYmx5Q2FsbGVlOworfQorCitjbGFzcyBKU0NlbGw7CisKK2NsYXNzIENhbGxlZUJpdHMg
eworcHVibGljOgorICAgIENhbGxlZUJpdHMoKSA9IGRlZmF1bHQ7CisgICAgQ2FsbGVlQml0cyh2
b2lkKiBwdHIpIDogbV9wdHIocHRyKSB7IH0gCisKKyAgICBDYWxsZWVCaXRzJiBvcGVyYXRvcj0o
SlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgbV9wdHIgPSBjZWxsOworICAgICAgICBBU1NF
UlQoaXNDZWxsKCkpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBp
c1dhc20oKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3B0cikgJiAx
OyB9CisgICAgYm9vbCBpc0NlbGwoKSBjb25zdCB7IHJldHVybiAhaXNXYXNtKCk7IH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNDZWxsKiBhc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc1dhc20oKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPihtX3B0
cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSog
YXNXYXNtQ2FsbGVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1dhc20oKSk7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqPihiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihtX3B0cikgJiB+MSk7CisgICAgfQorCisgICAgdm9pZCogcmF3
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCog
bV9wdHIgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTQgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1
cmUpIHsKLSAgICAgICAgICAgIGlmICghdmlzaXRvci0+aXNXYXNtRnJhbWUoKQotICAgICAgICAg
ICAgICAgICYmICEhdmlzaXRvci0+Y29kZUJsb2NrKCkKLSAgICAgICAgICAgICAgICAmJiAhdmlz
aXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9u
KCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKQorICAgICAgICAg
ICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZTo6d2FzbSgpKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygp
LT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAg
ICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSht
X3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5
dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCB2
aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3It
PmJ5dGVjb2RlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3Zt
LCAgdmlzaXRvci0+Y2FsbGVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSht
X3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSkpOwogICAgICAgICAgICAgfQogICAgIAog
ICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpAQCAtNTAz
LDcgKzUwMyw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IGZyYW1lc0NvdW50ID0gMDsKLSAgICBjYWxsRnJh
bWUtPml0ZXJhdGUoWyZdIChTdGFja1Zpc2l0b3ImKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7
CisgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwgWyZdIChTdGFja1Zpc2l0
b3ImKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAgICAgICAgIGZyYW1lc0NvdW50Kys7CiAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0pOwpAQCAtNTE0LDcg
KzUxNCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFMKICAgICBm
cmFtZXNDb3VudCA9IHN0ZDo6bWluKG1heFN0YWNrU2l6ZSwgZnJhbWVzQ291bnQpOwogCiAgICAg
R2V0U3RhY2tUcmFjZUZ1bmN0b3IgZnVuY3Rvcih2bSwgcmVzdWx0cywgZnJhbWVzVG9Ta2lwLCBm
cmFtZXNDb3VudCk7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIFN0YWNr
VmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgIEFTU0VSVChyZXN1
bHRzLnNpemUoKSA9PSByZXN1bHRzLmNhcGFjaXR5KCkpOwogfQogCkBAIC01NzUsMTMgKzU3NSwx
NCBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSGFuZGxlckluZm8qIG1faGFuZGxlcjsKIH07CiAK
LUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2
bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXIqIGRlYnVn
Z2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KHZtKS0+ZGVidWdnZXIoKSkgewog
ICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKLSAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpKQorICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20oKQorICAgICAgICAgICAgfHwgaXNX
ZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbEZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkKKyAgICAg
ICAgICAgIHx8IGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCktPmluaGVyaXRzKHZtLCBKU0Z1
bmN0aW9uOjppbmZvKCkpKQogICAgICAgICAgICAgZGVidWdnZXItPnVud2luZEV2ZW50KGNhbGxG
cmFtZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJv
Z3JhbShjYWxsRnJhbWUpOwpAQCAtNTkxLDggKzU5Miw5IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IHZvaWQgbm90aWZ5RGVidWdnZXIKIAogY2xhc3MgVW53aW5kRnVuY3RvciB7CiBwdWJsaWM6Ci0g
ICAgVW53aW5kRnVuY3RvcihDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlv
biwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBIYW5kbGVySW5mbyomIGhhbmRsZXIpCi0gICAgICAg
IDogbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQorICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxs
RnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgQ29kZUJsb2NrKiYgY29kZUJs
b2NrLCBIYW5kbGVySW5mbyomIGhhbmRsZXIpCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAg
LCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwgbV9pc1Rlcm1pbmF0aW9uKGlzVGVy
bWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
aGFuZGxlcihoYW5kbGVyKQpAQCAtNjE0LDcgKzYxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcobV9jYWxs
RnJhbWUpOworICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKG1fdm0sIG1fY2FsbEZy
YW1lKTsKIAogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZpc2l0b3IpOwogCkBAIC02MzQsMTMgKzYzNiwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAoIWN1cnJlbnRDYWxsZWVTYXZlcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBWTSYgdm0gPSBtX2NhbGxGcmFtZS0+dm0oKTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMo
KTsKICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKTsKICAgICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdCo+KG1fY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKICAgICAgICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+c2l6ZSgpOwotICAgICAg
ICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKHZtLnRvcFZNRW50cnlGcmFt
ZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZtRW50cnlSZWNvcmQobV92bS50
b3BWTUVudHJ5RnJhbWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGN1cnJlbnRFbnRy
eSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udENvcHlS
ZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCkBAIC02NTQsNiArNjU1LDcgQEAgcHJp
dmF0ZToKICNlbmRpZgogICAgIH0KIAorICAgIFZNJiBtX3ZtOwogICAgIENhbGxGcmFtZSomIG1f
Y2FsbEZyYW1lOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9uOwogICAgIENvZGVCbG9jayomIG1f
Y29kZUJsb2NrOwpAQCAtNjg2LDE4ICs2ODgsMTcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dQogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVy
IHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5m
byogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKGNhbGxGcmFt
ZSwgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pLCBjb2RlQmxv
Y2ssIGhhbmRsZXIpOwotICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBVbndp
bmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhj
ZXB0aW9uKHZtLCBleGNlcHRpb24pLCBjb2RlQmxvY2ssIGhhbmRsZXIpOworICAgIFN0YWNrVmlz
aXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgIGlmICghaGFuZGxlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gaGFuZGxlcjsKIH0KIAotdm9p
ZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQordm9pZCBJbnRlcnByZXRlcjo6
bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1l
LT52bSgpOwotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLT5kZWJ1Z2dlcigpOworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+dm1FbnRyeUdsb2JhbE9iamVjdCh2bSktPmRlYnVnZ2VyKCk7CiAgICAgaWYgKGRlYnVnZ2Vy
ICYmIGRlYnVnZ2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpICYmICFleGNlcHRpb24tPmRp
ZE5vdGlmeUluc3BlY3Rvck9mVGhyb3coKSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgYXNzdW1l
cyB0aGF0IGlmIHRoZSBkZWJ1Z2dlciBpcyBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gaW5saW5p
bmcuCiAgICAgICAgIC8vIElmIHRoYXQgYXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2Ug
dGhlbiB3ZSdsbCBpZ25vcmUgdGhlIGlubGluZWQgY2FsbApAQCAtNzEwLDcgKzcxMSw3IEBAIHZv
aWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHQKICAgICAgICAgICAgIGhhc0Nh
dGNoSGFuZGxlciA9IGZhbHNlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEdldENhdGNo
SGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShm
dW5jdG9yKTsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0s
IGZ1bmN0b3IpOwogICAgICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBmdW5jdG9yLmhh
bmRsZXIoKTsKICAgICAgICAgICAgIEFTU0VSVCghaGFuZGxlciB8fCBoYW5kbGVyLT5pc0NhdGNo
SGFuZGxlcigpKTsKICAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9ICEhaGFuZGxlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5o
CShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1lKiwgSlNGdW5j
dGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVyKiYgYXJndiwg
aW50JiBhcmdjKTsKICAgICAgICAgCiAgICAgICAgIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyog
dW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbiosIFVud2luZFN0YXJ0KTsKLSAgICAg
ICAgdm9pZCBub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihDYWxsRnJhbWUqLCBF
eGNlcHRpb24qKTsKKyAgICAgICAgdm9pZCBub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRo
cm93bihWTSYsIENhbGxGcmFtZSosIEV4Y2VwdGlvbiopOwogICAgICAgICBORVZFUl9JTkxJTkUg
dm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tUeXBlKTsKICAgICAgICAgc3RhdGljIEpT
U3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoVk0mLCBjb25zdCBWZWN0b3I8U3RhY2tGcmFtZT4m
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
LmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CiAgICAgICAgIGludDMyX3QmIHRhZygp
OwogCisgICAgICAgIHZvaWQqIHBvaW50ZXIoKSBjb25zdDsKKwogICAgICAgICBzdGF0aWMgUmVn
aXN0ZXIgd2l0aEludChpbnQzMl90IGkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVy
IHIgPSBqc051bWJlcihpKTsKQEAgLTE5NSw2ICsxOTcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIFJlZ2lzdGVyOjpwb2ludGVy
KCkgY29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIHUuZW5j
b2RlZFZhbHVlLnB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHBheWxvYWQoKSk7CisjZW5kaWYKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3Qg
UmVnaXN0ZXI6OnBheWxvYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHUuZW5jb2Rl
ZFZhbHVlLmFzQml0cy5wYXlsb2FkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUo
Vk0mIHZtLCBFeGVjUwogICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgVmVj
dG9yPEZyYW1lPiBzdGFja1JpZ2h0Tm93OwogICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KAot
ICAgICAgICAgICAgZXhlYywgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIC0+IFN0YWNrVmlz
aXRvcjo6U3RhdHVzIHsKKyAgICAgICAgICAgIGV4ZWMsICZ2bSwgWyZdIChTdGFja1Zpc2l0b3Im
IHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKICAgICAgICAgICAgICAgICBpZiAo
dmlzaXRvci0+aXNJbmxpbmVkRnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzV2Fz
bUZyYW1lKCkpIHsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0
ZShWTSYgdm0sIEV4ZWNTCiAgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxEZWxldGVkID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1ha2Ugc2hhZG93IGNoaWNrZW4gd29yayB3
aXRoIFdhc20uCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTQ0MQotICAgICAgICAgICAgICAgIHN0YWNrUmlnaHROb3cuYXBwZW5k
KEZyYW1lKGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKSwgdmlzaXRvci0+Y2Fs
bEZyYW1lKCksIGlzVGFpbERlbGV0ZWQpKTsKKyAgICAgICAgICAgICAgICBzdGFja1JpZ2h0Tm93
LmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwo
KSksIHZpc2l0b3ItPmNhbGxGcmFtZSgpLCBpc1RhaWxEZWxldGVkKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgc3RhY2tSaWdodE5vdy5yZXZlcnNlKCk7CkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBTaGFk
b3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAgIAogICAgIFZlY3RvcjxGcmFtZT4g
dG9QdXNoOwogICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoCi0gICAgICAgIGV4ZWMsIFsmXSAoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CisgICAgICAgIGV4
ZWMsICZ2bSwgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3Rh
dHVzIHsKICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0lubGluZWRGcmFtZSgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBpbmxpbmluZy4KICAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1Njg2CkBAIC0zMDYs
NyArMzA2LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAg
ICAgICAgICAgICAgIGlmIChzY29wZSkKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2NvcGUtPmluaGVyaXRzKHZtLCBKU1Njb3BlOjppbmZvKCkpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRvUHVzaC5hcHBlbmQoRnJhbWUoanNDYXN0PEpTT2JqZWN0Kj4odmlzaXRv
ci0+Y2FsbGVlKCkpLCBjYWxsRnJhbWUsIGlzVGFpbERlbGV0ZWQsIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCksIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpKSk7Cisg
ICAgICAgICAgICB0b1B1c2guYXBwZW5kKEZyYW1lKGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3It
PmNhbGxlZSgpLmFzQ2VsbCgpKSwgY2FsbEZyYW1lLCBpc1RhaWxEZWxldGVkLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KSkpOwogCiAgICAgICAgICAgICBpZiAoaW5kZXhJbkxvZyA8IGxvZ0N1cnNvckluZGV4CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gcHJvdGVjdHMgdXMgZnJvbSB0aGUgY2FzZSB3
aGVyZSBhZHZhbmNlSW5kZXhJbkxvZ1RvIGRpZG4ndCBmaW5kCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotU3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lKQor
U3RhY2tWaXNpdG9yOjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0p
CiB7CiAgICAgbV9mcmFtZS5tX2luZGV4ID0gMDsKICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUg
PSBmYWxzZTsKICAgICBDYWxsRnJhbWUqIHRvcEZyYW1lOwogICAgIGlmIChzdGFydEZyYW1lKSB7
Ci0gICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBzdGFydEZyYW1lLT52bSgpLnRvcFZN
RW50cnlGcmFtZTsKLSAgICAgICAgdG9wRnJhbWUgPSBzdGFydEZyYW1lLT52bSgpLnRvcENhbGxG
cmFtZTsKKyAgICAgICAgQVNTRVJUKHZtKTsKKyAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFt
ZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEZyYW1lID0gdm0tPnRvcENhbGxG
cmFtZTsKICAgICAgICAgCiAgICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lk
Kj4obV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1l
KSkgewogICAgICAgICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9WTUVu
dHJ5RnJhbWUpLT5tX3ByZXZUb3BDYWxsRnJhbWU7CkBAIC0xMDMsNyArMTA0LDggQEAgdm9pZCBT
dGFja1Zpc2l0b3I6OnJlYWRGcmFtZShDYWxsRnJhbWUqIAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCktPmlzQW55V2FzbUNhbGxlZShjYWxsRnJh
bWUtPnZtKCkpKSB7CisgICAgaWYgKCEhY2FsbEZyYW1lLT5jYWxsZWUoKS5yYXdQdHIoKQorICAg
ICAgICAmJiAoY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20oKSB8fCBpc1dlYkFzc2VtYmx5VG9K
U0NhbGxlZShjYWxsRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSkpIHsKICAgICAgICAgcmVhZE5v
bklubGluZWRGcmFtZShjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU1
LDEwICsxNTcsMTEgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQwog
ICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVu
dHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKICAgICBtX2ZyYW1lLm1faXNXYXNt
RnJhbWUgPSBmYWxzZTsKIAotICAgIEpTQ2VsbCogY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUo
KTsKKyAgICBDYWxsZWVCaXRzIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CiAgICAgbV9m
cmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKIAotICAgIGlmIChjYWxsZWUtPmlzQW55V2FzbUNhbGxl
ZSgqY2FsbGVlLT52bSgpKSkgeworICAgIGlmICghIWNhbGxlZS5yYXdQdHIoKQorICAgICAgICAm
JiAoY2FsbGVlLmlzV2FzbSgpIHx8IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlZS5hc0Nl
bGwoKSkpKSB7CiAgICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAg
IG1fZnJhbWUubV9jb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNv
ZGVPZmZzZXQgPSAwOwpAQCAtMjA0LDcgKzIwNyw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
SW5saW5lZEZyYW1lKENhbGwKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgICAgICBtX2ZyYW1l
Lm1fY2FsbGVlID0gY2FsbGVlOwotICAgICAgICBBU1NFUlQobV9mcmFtZS5jYWxsZWUoKSk7Cisg
ICAgICAgIEFTU0VSVCghIW1fZnJhbWUuY2FsbGVlKCkucmF3UHRyKCkpOwogCiAgICAgICAgIC8v
IFRoZSBjYWxsZXJGcmFtZSBqdXN0IG5lZWRzIHRvIGJlIG5vbi1udWxsIHRvIGluZGljYXRlIHRo
YXQgd2UKICAgICAgICAgLy8gaGF2ZW4ndCByZWFjaGVkIHRoZSBsYXN0IGZyYW1lIHlldC4gU2V0
dGluZyBpdCB0byB0aGUgcm9vdApAQCAtMjU0LDE0ICsyNTcsMTIgQEAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIFN0YWNrVmlzaXRvcjo6RnJhbQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAg
IGlmIChpc1dhc21GcmFtZSgpKSB7Ci0gICAgICAgIGlmIChKU0NlbGwqIGNhbGxlZSA9IHRoaXMt
PmNhbGxlZSgpKSB7Ci0gICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNh
bGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KCpjYWxsZWUtPnZtKCks
IGNhbGxlZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIC8vIE90aGVyIHdhc20gY2FsbGVlcyAoZS5nLCBzdHVi
cykgZG9uJ3QgdXNlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28gbm90aGluZyBuZWVkcwotICAg
ICAgICAgICAgLy8gdG8gYmUgcmVzdG9yZWQgZm9yIHRoZW0uCisgICAgICAgIGlmIChjYWxsZWUo
KS5pc0NlbGwoKSkgeworICAgICAgICAgICAgQVNTRVJUKGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVl
KGNhbGxlZSgpLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBXYXNtOjpXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUNhbGxlZSA9IGNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpOworICAgICAgICBy
ZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKQEAgLTI3Niw3ICsyNzcsNiBAQCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogU3RhY2tWaXNpdG9yOjpGcmFtCiBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6
ZnVuY3Rpb25OYW1lKCkgY29uc3QKIHsKICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgIEpTQ2Vs
bCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCk7CiAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsK
ICAgICBjYXNlIENvZGVUeXBlOjpXYXNtOgpAQCAtMjg4LDEyICsyODgsMTQgQEAgU3RyaW5nIFN0
YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZQogICAgIGNhc2UgQ29kZVR5cGU6Ok1vZHVs
ZToKICAgICAgICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJtb2R1bGUgY29kZSIpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENvZGVUeXBlOjpOYXRpdmU6CisgICAgY2FzZSBDb2RlVHlw
ZTo6TmF0aXZlOiB7CisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXND
ZWxsKCk7CiAgICAgICAgIGlmIChjYWxsZWUpCiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRD
YWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+
KGNhbGxlZSkpLmltcGwoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6RnVu
Y3Rpb246Ci0gICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxs
RnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4oY2FsbGVlKSkuaW1wbCgpOworICAgIH0K
KyAgICBjYXNlIENvZGVUeXBlOjpGdW5jdGlvbjogCisgICAgICAgIHRyYWNlTGluZSA9IGdldENh
bGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4o
dGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCkpKS5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29kZVR5cGU6Okdsb2JhbDoKICAgICAgICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJn
bG9iYWwgY29kZSIpOwpAQCAtNDU1LDcgKzQ1Nyw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFt
ZTo6ZHVtcChQcmludFN0cmUKICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJJbmxpbmVD
YWxsRnJhbWU6ICIsIFJhd1BvaW50ZXIobV9pbmxpbmVDYWxsRnJhbWUpLCAiXG4iKTsKICNlbmRp
ZgogCi0gICAgICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2Fs
bGVlKCkpLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNhbGxlZTogIiwgUmF3
UG9pbnRlcihjYWxsZWUoKS5yYXdQdHIoKSksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQoaW5k
ZW50LCAicmV0dXJuUEM6ICIsIFJhd1BvaW50ZXIocmV0dXJuUEMpLCAiXG4iKTsKICAgICAgICAg
b3V0LnByaW50KGluZGVudCwgImNhbGxlckZyYW1lOiAiLCBSYXdQb2ludGVyKGNhbGxlckZyYW1l
KSwgIlxuIik7CiAgICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uUmF3Qml0cyA9IGNhbGxGcmFtZS0+
Y2FsbFNpdGVBc1Jhd0JpdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TdGFja1Zpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhbGxlZUJpdHMu
aCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNp
bmNsdWRlIDx3dGYvSW5kZW50ZXIuaD4KQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyB9CiAgICAgICAgIGJvb2wgY2FsbGVySXNWTUVudHJ5
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlcklzVk1FbnRyeUZyYW1lOyB9CiAgICAgICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlckZyYW1lOyB9
Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KKyAg
ICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZU9mZnNldDsgfQogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgp
IGNvbnN0IHsKQEAgLTExMCw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZNRW50cnlGcmFt
ZSogbV9WTUVudHJ5RnJhbWU7CiAgICAgICAgIFZNRW50cnlGcmFtZSogbV9DYWxsZXJWTUVudHJ5
RnJhbWU7CiAgICAgICAgIENhbGxGcmFtZSogbV9jYWxsZXJGcmFtZTsKLSAgICAgICAgSlNDZWxs
KiBtX2NhbGxlZTsKKyAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CiAgICAgICAgIHNpemVf
dCBtX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwpAQCAtMTMwLDkgKzEzMSw5IEBAIHB1Ymxp
YzoKICAgICAvLyAgICAgU3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJikgY29uc3Q7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCB2aXNpdChD
YWxsRnJhbWUqIHN0YXJ0RnJhbWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgc3RhdGlj
IHZvaWQgdmlzaXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCiAgICAgewotICAgICAgICBTdGFja1Zpc2l0b3IgdmlzaXRvcihzdGFydEZyYW1l
KTsKKyAgICAgICAgU3RhY2tWaXNpdG9yIHZpc2l0b3Ioc3RhcnRGcmFtZSwgdm0pOwogICAgICAg
ICB3aGlsZSAodmlzaXRvci0+Y2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgIFN0YXR1cyBzdGF0
dXMgPSBmdW5jdG9yKHZpc2l0b3IpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDb250aW51
ZSkKQEAgLTE0Niw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bndpbmRUb01hY2hpbmVD
b2RlQmxvY2tGcmFtZSgpOwogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNr
VmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZNKik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGdvdG9OZXh0RnJhbWUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTUsMTEgKzU5NSwxNSBAQCB2
b2lkIGxpbmtGb3IoCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKIAogICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBj
YWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAg
IC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAg
QVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKICAgICBWTSYgdm0gPSBj
YWxsZXJGcmFtZS0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxl
ckZyYW1lLT5jb2RlQmxvY2soKTsKIAogICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRv
bid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNz
ZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKSkgPyB3ZWJBc3NlbWJseU93bmVy
KGNhbGxlckZyYW1lLT5jYWxsZWUoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgSlNDZWxsKiBv
d25lciA9IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0Nl
bGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkg
OiBjYWxsZXJDb2RlQmxvY2s7CiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLmlzTGlua2VkKCkpOwpAQCAtNzE3LDEyICs3MjEsMTcgQEAgdm9pZCBsaW5rUG9s
eW1vcnBoaWNDYWxsKAogICAgIH0KIAogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVj
LT5jYWxsZXJGcmFtZSgpOworCisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxs
IGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVu
c3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxl
ZSgpLmlzQ2VsbCgpKTsKKwogICAgIFZNJiB2bSA9IGNhbGxlckZyYW1lLT52bSgpOwogICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1l
LT5jYWxsZWUoKSk7CisgICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJBc3NlbWJseVRvSlND
YWxsZWUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKIAogICAgIC8vIFdlYkFzc2Vt
Ymx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxs
KiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5j
YWxsZWUoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNz
ZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkg
OiBjYWxsZXJDb2RlQmxvY2s7CiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIENhbGxWYXJpYW50
TGlzdCBsaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAko
cmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBhZGRFcnJvckluZm9B
bmRHZXRCeXRlY29kZU9mZnNldChFeAogCiAgICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgewog
ICAgICAgICAgICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5j
dG9yKGV4ZWMpOwotICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3Ip
OworICAgICAgICAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdCh2bS50b3BDYWxsRnJhbWUsICZ2bSwg
ZnVuY3Rvcik7CiAgICAgICAgICAgICBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1l
KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwog
ICAgICAgICAgICAgKmJ5dGVjb2RlT2Zmc2V0ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU2LDggKzE1NiwxMCBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTCiAgICAgYm9vbCBoYXNUcmFjZSA9IGFkZEVycm9ySW5mb0FuZEdldEJ5dGVj
b2RlT2Zmc2V0KGV4ZWMsIHZtLCB0aGlzLCB1c2VDdXJyZW50RnJhbWUsIGNhbGxGcmFtZSwgaGFz
U291cmNlQXBwZW5kZXIoKSA/ICZieXRlY29kZU9mZnNldCA6IG51bGxwdHIpOwogCiAgICAgaWYg
KGhhc1RyYWNlICYmIGNhbGxGcmFtZSAmJiBoYXNTb3VyY2VBcHBlbmRlcigpKSB7Ci0gICAgICAg
IGlmIChjYWxsRnJhbWUgJiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgCisgICAgICAgIGlmIChj
YWxsRnJhbWUgJiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFjYWxsRnJhbWUtPmNhbGxlZSgpLmlzV2FzbSgpKTsKICAgICAgICAgICAgIGFwcGVuZFNvdXJj
ZVRvRXJyb3IoY2FsbEZyYW1lLCB0aGlzLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAko
cmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDE1ICsyOTUsNCBAQCBKU1ZhbHVlIEpTQ2VsbDo6
Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotYm9vbCBKU0NlbGw6OmlzQW55V2FzbUNhbGxlZShWTSYgdm0pIGNvbnN0Ci17Ci0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHJldHVybiBpbmhlcml0cyh2bSwgSlNXZWJBc3Nl
bWJseUNhbGxlZTo6aW5mbygpKSB8fCBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZSh0aGlzKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQot
fQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0Owog
ICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKLSAgICBib29sIGlzQW55V2FzbUNhbGxlZShWTSYp
IGNvbnN0OwogICAgIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBjb25zdDsKICAgICBib29sIGlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZp
c2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2LDEyIEBAIGlubGluZSB2b2lkIEpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW4KIAogQUxXQVlTX0lOTElORSBWTSYgRXhlY1N0YXRl
Ojp2bSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxlZSgpKTsKLSAgICBBU1NFUlQoY2FsbGVl
KCktPnZtKCkpOwotICAgIEFTU0VSVCghY2FsbGVlKCktPmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwor
ICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CisgICAgQVNTRVJU
KGNhbGxlZSk7CisgICAgQVNTRVJUKGNhbGxlZS0+dm0oKSk7CisgICAgQVNTRVJUKCFjYWxsZWUt
PmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwogICAgIC8vIFRoaXMgaXMgYW4gaW1wb3J0YW50IG9wdGlt
aXphdGlvbiBzaW5jZSB3ZSBhY2Nlc3MgdGhpcyBzbyBvZnRlbi4KLSAgICByZXR1cm4gKmNhbGxl
ZSgpLT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuICpjYWxsZWUtPm1hcmtlZEJsb2Nr
KCkudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE0ODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw3ICsyMzcsMTAgQEAgcHVibGljOgogCiAgICAgU3RhY2tWaXNpdG9y
OjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewot
ICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAgICAgICBpZiAo
IXZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6Q29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxs
ZWUoKS5hc0NlbGwoKTsKICAgICAgICAgaWYgKGNhbGxlZSAhPSBtX3RhcmdldENhbGxlZSkKICAg
ICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogCkBAIC0yNzksNyArMjgy
LDEwIEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBjYWxsZWUg
PSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCF2aXNpdG9yLT5jYWxsZWUoKS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworCisgICAg
ICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAKICAgICAg
ICAgaWYgKGNhbGxlZSAmJiBjYWxsZWUtPmluaGVyaXRzKCpjYWxsZWUtPnZtKCksIEpTQm91bmRG
dW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRp
bnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5j
cHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
YWNrRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBpbnRwdHJfdCBT
dGFja0ZyYW1lOjpzb3VyY2VJRCgpIGNvbnN0CiAKIFN0cmluZyBTdGFja0ZyYW1lOjpzb3VyY2VV
UkwoKSBjb25zdAogeworICAgIGlmIChtX2lzV2FzbUZyYW1lKQorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJbd2FzbSBjb2RlXSIpOworCiAgICAgaWYgKCFtX2NvZGVCbG9jaykgewotICAg
ICAgICBpZiAobV9jYWxsZWUgJiYgbV9jYWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUt
PnZtKCkpKQotICAgICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW3dhc20gY29kZV0iKTsK
ICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW25hdGl2ZSBjb2RlXSIpOwogICAgIH0KIApA
QCAtNTYsNiArNTcsOSBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6c291cmNlVVJMKCkgY29uc3QKIAog
U3RyaW5nIFN0YWNrRnJhbWU6OmZ1bmN0aW9uTmFtZShWTSYgdm0pIGNvbnN0CiB7CisgICAgaWYg
KG1faXNXYXNtRnJhbWUpCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIjx3YXNtPiIpOwor
CiAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAgICAgICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBFdmFsQ29kZToKQEAgLTcyLDcgKzc2LDcgQEAgU3Ry
aW5nIFN0YWNrRnJhbWU6OmZ1bmN0aW9uTmFtZShWTSYgdm0pIAogICAgIH0KICAgICBTdHJpbmcg
bmFtZTsKICAgICBpZiAobV9jYWxsZWUpIHsKLSAgICAgICAgaWYgKG1fY2FsbGVlLT5pc0FueVdh
c21DYWxsZWUoKm1fY2FsbGVlLT52bSgpKSkKKyAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlUb0pT
Q2FsbGVlKG1fY2FsbGVlLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Ijx3YXNtPiIpOwogICAgICAgICBpZiAobV9jYWxsZWUtPmlzT2JqZWN0KCkpCiAgICAgICAgICAg
ICBuYW1lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPiht
X2NhbGxlZS5nZXQoKSkpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBA
QCBjbGFzcyBKU09iamVjdDsKIAogY2xhc3MgU3RhY2tGcmFtZSB7CiBwdWJsaWM6CisgICAgU3Rh
Y2tGcmFtZSgpID0gZGVmYXVsdDsKKwogICAgIFN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIGNh
bGxlZSkKICAgICAgICAgOiBtX2NhbGxlZSh2bSwgY2FsbGVlKQogICAgIHsgfQpAQCAtNDUsNiAr
NDcsMTMgQEAgcHVibGljOgogICAgICAgICAsIG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpCiAgICAgeyB9CiAKKyAgICBzdGF0aWMgU3RhY2tGcmFtZSB3YXNtKCkKKyAgICB7CisgICAg
ICAgIFN0YWNrRnJhbWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9pc1dhc21GcmFtZSA9IHRy
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBoYXNMaW5lQW5k
Q29sdW1uSW5mbygpIGNvbnN0IHsgcmV0dXJuICEhbV9jb2RlQmxvY2s7IH0KICAgICAKICAgICB2
b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1u
KSBjb25zdDsKQEAgLTY1LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBTdHJvbmc8SlNDZWxsPiBt
X2NhbGxlZSB7IH07CiAgICAgU3Ryb25nPENvZGVCbG9jaz4gbV9jb2RlQmxvY2sgeyB9OwogICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQgeyBVSU5UX01BWCB9OwotICAgIAorICAgIGJvb2wg
bV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3
LDcgKzIzNyw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25FeGVj
dXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAg
IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNhbGxl
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIC8vIEZJWE1FOiBy
ZW1vdmUKKyAgICAvL3dlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJB
c3NlbWJseUNhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5VG9K
U0NhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHdlYkFz
c2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCkBAIC02MTYs
MTQgKzYxNywxNCBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiAK
ICAgICBBU1NFUlQoZXhlYyA9PSB0b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKIAotICAgIGludGVycHJldGVyLT5ub3RpZnlEZWJ1
Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihleGVjLCBleGNlcHRpb24pOworICAgIGludGVycHJl
dGVyLT5ub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bigqdGhpcywgZXhlYywgZXhj
ZXB0aW9uKTsKIAogICAgIHNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogfQogCiBKU1ZhbHVlIFZN
Ojp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhyb3duVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSAqdGhpczsKICAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4odm0sIHRocm93blZh
bHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikKICAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9u
OjpjcmVhdGUoKnRoaXMsIHRocm93blZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIyLDcgKzkyMiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1
aW50MzJfdCBmdW4KICAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCiAgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mQ29kZUJsb2NrKCkpOwogICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNKU0Js
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKG1faW5mby5pbnRlcm5hbEZ1bmN0aW9uQ291bnQo
KSwgZnVuY3Rpb25JbmRleCkpOworICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGNvZGVCbG9jaywgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRX
YXNtVG9KU1N0dWIoZnVuY3Rpb25JbmRleCkpOwogICAgICAgICBWYWx1ZSoganNDYWxsUmVzdWx0
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2NrLCBv
cmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvbnRleHQuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEw
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNtIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkocmV2aXNpb24gMjE0ODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZv
OwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwogY2xh
c3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ4MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTMgKzM5LDE3IEBAIHZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMo
Y29uc3QgRnVuY3QKICAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7
IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsg
KytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKICAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XS5nZXQoKTsKIAotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+
anNUb1dhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENh
bGxlZSk7CisgICAgICAgIGF1dG8gd3JhcENhbGxlZSA9IFtdIChXZWJBc3NlbWJseUNhbGxlZSog
Y2FsbGVlKSAtPiB2b2lkKiB7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQq
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpIHwgMSk7CisgICAgICAgIH07CiAKLSAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9p
bnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53
YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIFJl
ZjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6V2Vi
QXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9p
bnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5q
c1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd3JhcENhbGxlZShqc0VudHJ5cG9pbnRDYWxsZWUu
cHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50
cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBSZWY8V2FzbTo6
V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6V2ViQXNzZW1i
bHlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVN
b3ZlTG9jYXRpb24sIHdyYXBDYWxsZWUod2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKKwor
ICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBv
aW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHJldmlzaW9u
IDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhy
b3dFeGNlcHRpb25Gcm9tCiAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgICAg
ICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgICAgICBBU1NFUlQoISF2bS0+
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOworICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFj
aywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5jYXVnaHRFeGNlcHRp
b24pCisgICAgICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9h
ZCB0aGUgVk0uIFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAgICAgICAvLyB0
aGlzIHNpbmNlIGl0IGlzIGNvbXBpbGVkIHdpdGggYSBjb25zdGFudCBWTSBwb2ludGVyLgorICAg
ICAgICAvLyBGSVhNRTogaXMgdGhpcyB0b28gbXVjaCBvZiBhIGhhY2s/CisgICAgICAgIGJpdHdp
c2VfY2FzdDx1aW50NjRfdCo+KGV4ZWMpW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0gPSBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHdhc21Db250ZXh0LT53ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSk7CiAg
ICAgICAgIHJldHVybiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDMyICsyOCwx
NiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKIAotbmFtZXNwYWNlIEpTQyB7
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseUNhbGxlZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07Ci0KLUpTV2Vi
QXNzZW1ibHlDYWxsZWU6OkpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mIHZtKQotICAgIDogQmFzZSh2
bSwgdm0ud2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuZ2V0KCkpCi17IH0KLQotdm9pZCBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgIG1f
ZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7Ci0gICAgV2FzbTo6cmVnaXN0ZXJDb2Rl
KG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKSk7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCitXZWJBc3NlbWJseUNhbGxlZTo6V2ViQXNzZW1ibHlDYWxsZWUoRW50cnlw
b2ludCYmIGVudHJ5cG9pbnQpCisgICAgOiBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50
KSkKIHsKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOwotICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKHRo
aXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5j
b2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci0gICAgdGhpc09iamVjdC0+SlNX
ZWJBc3NlbWJseUNhbGxlZTo6fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKKyAgICByZWdpc3RlckNv
ZGUobV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUu
aAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQ1ICsyNywzMiBAQAogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXJBdE9mZnNldExpc3QuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKLW5h
bWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3Mg
SlNXZWJBc3NlbWJseUNhbGxlZSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgV2ViQXNzZW1ibHlD
YWxsZWUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViQXNzZW1ibHlDYWxsZWU+IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBjcmVhdGUoVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCkKKyAgICBzdGF0aWMgUmVmPFdlYkFzc2VtYmx5Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50
cnlwb2ludCYmIGVudHJ5cG9pbnQpCiAgICAgewotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBjYWxsZWUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNhbGxlZSh2bSk7Ci0gICAgICAgIGNhbGxlZS0+Zmlu
aXNoQ3JlYXRpb24odm0sIFdURk1vdmUoZW50cnlwb2ludCkpOwotICAgICAgICByZXR1cm4gY2Fs
bGVlOworICAgICAgICBXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlID0gbmV3IFdlYkFzc2VtYmx5
Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKmNh
bGxlZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwotICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7Ci0KICAgICB2b2lkKiBlbnRyeXBvaW50KCkgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogCiAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNh
bGxlZVNhdmVSZWdpc3RlcnM7IH0KIAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2ludCYmKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgV2ViQXNzZW1ibHlDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmKTsKIAogICAgIFdhc206OkVu
dHJ5cG9pbnQgbV9lbnRyeXBvaW50OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw4ICs0Nyw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2QK
ICAgICBtX21vZHVsZS5zZXQodm0sIHRoaXMsIG93bmVyKTsKICAgICBBU1NFUlQoIW1vZHVsZSgp
LT5jb2RlQmxvY2sobW9kZSkpOwogICAgIG1vZHVsZSgpLT5zZXRDb2RlQmxvY2sodm0sIG1vZGUs
IHRoaXMpOwotCi0gICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7CisgICAgbV9jYWxsZWVz
LnJlc2l6ZShtX2NhbGxlZUNvdW50ICogMik7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6aW5pdGlhbGl6ZSgpCkBAIC03NCwxMSArNzMsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrOjppbml0aWFsaXplKAogCiAgICAgLy8gVGhlIGNvZGUgYSBtb2R1bGUgZW1pdHMg
dG8gY2FsbCBpbnRvIEpTIHJlbGllcyBvbiB1cyB0byBzZXQgdGhpcyB1cC4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV93YXNtRXhpdFN0dWJzLnNpemUoKTsgaSsrKQotICAgICAgICBp
bXBvcnRXYXNtVG9KU1N0dWIobV9jYWxsZWVDb3VudCwgaSkgPSBtX3dhc21FeGl0U3R1YnNbaV0u
d2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGltcG9ydFdhc21U
b0pTU3R1YihpKSA9IG1fd2FzbUV4aXRTdHVic1tpXS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKIAotICAgIHBsYW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgIHNldEpT
RW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0g
ICAgICAgIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5
cG9pbnRDYWxsZWUpOworICAgIHBsYW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBSZWY8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+JiYganNFbnRyeXBvaW50
Q2FsbGVlLCBSZWY8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRDYWxs
ZWUpIHsKKyAgICAgICAgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKGNhbGxlZUluZGV4LCBXVEZNb3Zl
KGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZShj
YWxsZWVJbmRleCwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0pOwogCiAg
ICAgbV9wbGFuID0gbnVsbHB0cjsKQEAgLTExOCw4ICsxMTcsNiBAQCB2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxl
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3Vu
dCAqIDI7IGkrKykKLSAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygp
W2ldKTsKIAogICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVj
dC0+bV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlz
aW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJQ
cm9taXNlRGVmZXJyZWRUaW1lci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUg
IlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSA8d3RmL0JhZy5oPgpAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVs
ZSogb3duZXIsIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwg
dW5zaWduZWQgY2FsbGVlQ291bnQsIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCiAgICAg
ewotICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCwg
ZnVuY3Rpb25JbXBvcnRDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwg
bW9kZSwgV1RGTW92ZShwbGFuKSwgY2FsbGVlQ291bnQpOworICAgICAgICBhdXRvKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5o
ZWFwLCBhbGxvY2F0aW9uU2l6ZShmdW5jdGlvbkltcG9ydENvdW50KSkpIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2sodm0sIG93bmVyLCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBjYWxsZWVDb3VudCk7CiAg
ICAgICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KQEAgLTc1LDQ3ICs3Niw0MyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nJiBlcnJvck1l
c3NhZ2UoKSB7IEFTU0VSVCghcnVubmFibGUoKSk7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsgfQog
ICAgIGJvb2wgaXNTYWZlVG9SdW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0OwogCi0gICAg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgUmVmUHRyPFdhc206OldlYkFz
c2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1
bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNv
dW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAg
ICAgIHJldHVybiBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgUmVmUHRyPFdhc206OldlYkFz
c2VtYmx5Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAg
IHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBv
cnRDb3VudCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVl
Q291bnQpOwotICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVD
b3VudF0uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2Nh
bGxlZUNvdW50XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEpTRW50cnlwb2ludENhbGxl
ZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxs
ZWUpCisgICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgs
IFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4gY2FsbGVlKQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2Fs
bGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CisgICAgICAgIG1fY2Fs
bGVlc1tjYWxsZWVJbmRleF0gPSBjYWxsZWU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXYXNtRW50
cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBjYWxsZWUpCisgICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh1bnNpZ25l
ZCBjYWxsZWVJbmRleCwgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBjYWxsZWUpCiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQp
OwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0s
IHRoaXMsIGNhbGxlZSk7CisgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVl
Q291bnRdID0gY2FsbGVlOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q2FsbGVlPiogY2FsbGVlcygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUNhbGxlZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZD
YWxsZWVzKCkpOyB9Ci0KICAgICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2ln
bmVkIGltcG9ydEluZGV4KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1wb3J0SW5k
ZXggPCBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIG1fd2FzbUV4aXRT
dHVic1tpbXBvcnRJbmRleF0ud2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yih1
bnNpZ25lZCBjYWxsZWVDb3VudCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKQotICAgICAgICAgICAgKyAo
c2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiBjYWxsZWVDb3VudCAq
IDIpCi0gICAgICAgICAgICArIChzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXgpOworICAgICAg
ICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydElu
ZGV4OwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEyNSwyMSArMTIyLDE5IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ2FsbGVlcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFN0dWJz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPik+KHNpemVvZihKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHZvaWQqKT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGNhbGxlZUNvdW50LCB1bnNp
Z25lZCBmdW5jdGlvbkltcG9ydENvdW50KQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUodW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBv
ZmZzZXRPZkNhbGxlZXMoKQotICAgICAgICAgICAgKyAoc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q2FsbGVlPikgKiBjYWxsZWVDb3VudCAqIDIpCi0gICAgICAgICAgICArIChzaXpl
b2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3VudCk7CisgICAgICAgIHJldHVybiBvZmZzZXRP
ZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3VudDsKICAg
ICB9CiAKLSAgICB2b2lkKiYgaW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGNhbGxlZUNvdW50
LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKKyAgICB2b2lkKiYgaW1wb3J0V2FzbVRvSlNTdHViKHVu
c2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8
dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9K
U1N0dWIoY2FsbGVlQ291bnQsIGltcG9ydEluZGV4KSk7CisgICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PHZvaWQqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0
V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KSk7CiAgICAgfQogCiAgICAgY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewpAQCAt
MTUwLDYgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm9zOwogICAgIFZlY3RvcjxXYXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4+IG1fY2FsbGVlczsKICAg
ICAvLyBUaGUgcGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCiAgICAgUmVm
UHRyPFdhc206OlBsYW4+IG1fcGxhbjsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgz
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxK
U0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CiAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6
ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9CiAKKyAgICBXZWJBc3NlbWJseVRv
SlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdldCgp
OyB9CisKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OnNfaW5mbyA9IHsgIldlYkFzc2Vt
Ymx5LlJ1bnRpbWVFcnJvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcikgfTsKKwogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ciogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAg
IGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcj4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iodm0sIHN0
cnVjdHVyZSk7CkBAIC00Niw5ICs0OCw2IEBAIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OkpT
V2ViQXNzZW1ibHkKIHsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3I6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcikgfTsK
LQotICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
CiAKICAgICAvLyBOb3RlOiB3ZSBzcGVjaWZpY2FsbHkgdXNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0
aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAg
ICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQg
bWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93Ci0gICAgLy8gaGFuZGxl
ciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2Vi
QXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKKyAgICAvLyBoYW5kbGVyIG1pZ2h0IHJlYWQg
dGhlIGdsb2JhbCBvYmplY3QgZnJvbSB0aGUgY2FsbGVlLiBUaGUgV2ViQXNzZW1ibHlDYWxsZWUg
ZG9lc24ndCBoYXZlIGEKICAgICAvLyBnbG9iYWwgb2JqZWN0LCBidXQgdGhlIFdlYkFzc2VtYmx5
RnVuY3Rpb24gZG9lcy4KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwg
YXJnQ291bnQsIHJlbWFpbmluZ0FyZ3MpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUo
KTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1i
bHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVl
KiBqc0VudHJ5cG9pbnQsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIFN0cnVjdHVyZSog
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhXZWJBc3NlbWJseUZ1bmN0
aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRy
eXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5
RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKICAg
ICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgICwgbV93YXNtRW50cnlQ
b2ludENvZGUod2FzbUVudHJ5cG9pbnQtPmVudHJ5cG9pbnQoKSkKICAgICAsIG1fc2lnbmF0dXJl
SW5kZXgoc2lnbmF0dXJlSW5kZXgpCkBAIC0xODYsMTggKzE4NiwxNiBAQCB2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7
Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc0VudHJ5cG9pbnQpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2FzbUVudHJ5cG9pbnQpOwogfQogCi12b2lkIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlw
b2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpCit2b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9p
bnQsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBp
bnN0YW5jZSk7CiAgICAgQVNTRVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7Ci0g
ICAgbV9qc0VudHJ5cG9pbnQuc2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOwotICAgIG1fd2Fz
bUVudHJ5cG9pbnQuc2V0KHZtLCB0aGlzLCB3YXNtRW50cnlwb2ludCk7CisgICAgbV9qc0VudHJ5
cG9pbnQgPSBqc0VudHJ5cG9pbnQ7CisgICAgbV93YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBv
aW50OwogICAgIEFTU0VSVChtX3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkgPT0gbV93YXNt
RW50cnlQb2ludENvZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRl
eCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSosIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQs
IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJl
SW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQpAQCAtNjMsMTUgKzYzLDE3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0
aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpOwog
CiBwcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIHZv
aWQqIG1fd2FzbUVudHJ5UG9pbnRDb2RlOyAvLyBDYWNoZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0
aGUgd2FzbSAtPiB3YXNtIHN0dWIgdG8gZG8gYSBzaW5nbGUgbG9hZCBhbmQganVtcCBpbnN0ZWFk
IG9mIGhhdmluZyBkZXBlbmRlbnQgbG9hZHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OworICAgIC8vIFdlIGNhbiBob2xkIHJhdyBwb2ludGVy
cyB0byB0aGVzZSwgc2luY2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBvdXIKKyAgICAvLyBpbnN0
YW5jZSwgd2hpY2gga2VlcHMgYWxpdmUgdGhlIENvZGVCbG9jaywgd2hpY2ggb3ducyB0aGlzIHBv
aW50ZXIuCisgICAgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIG1fanNFbnRyeXBvaW50OworICAg
IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBtX3dhc21FbnRyeXBvaW50OwogICAgIC8vIEl0J3Mg
c2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUg
YSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUg
TW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBh
Y3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTEg
KzEyNSwxMSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAg
ICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4
b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFw
cGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVu
Yy4KLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlwb2lu
dENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBl
eHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBv
aW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0
ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBA
IC0xOTYsOSArMTk2LDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
UwogICAgICAgICAgICAgSlNPYmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0
RnVuY3Rpb24oc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgbV9zdGFydEZ1
bmN0aW9uLnNldCh2bSwgdGhpcywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2Rl
QmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0
YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJl
SW5kZXgpOworICAgICAgICAgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0Vu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgUmVmUHRy
PFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rp
b25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
ID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUu
Z2V0KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAgICAg
ICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNzAsMTUgKzI3MCwxNSBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlw
b2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAg
IFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gY29k
ZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4g
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2Ug
ZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAg
ICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVu
dCB3LyBpbmRleCAwLgogICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4p
KS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwogICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgp
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwg
anNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBqc0Vu
dHJ5cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBzaWduYXR1
cmVJbmRleCk7CiAKICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxl
SW5kZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306152</attachid>
            <date>2017-04-03 18:38:46 -0700</date>
            <delta_ts>2017-04-03 19:26:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>81170</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMTUwMiw3ICsxNTAy
LDcgQEAKICAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOiBBZGRlZC4KICAgICAgICAgKEpT
Qzo6V2FzbTo6V29ya2xpc3Q6Om5leHRUaWNrZXQpOgogICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Ci0gICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmg6CisgICAgICAgIGUgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg6
CiAgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKICAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CiAg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUpOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBib3goRXhlY1N0YXRlKiBleGVjLCBWTSYgCiB9CiAKIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTgyLgotc3RhdGljIEpTVmFsdWUg
Y2FsbFdhc21GdW5jdGlvbihWTSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykK
K3N0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgY29uc3Qg
QXJnTGlzdCYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudDsKICAgICBp
bnQgYXJnQ291bnQgPSAxOwpAQCAtMzIwMiwxNSArMzIwMiwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgaWYgKHBsYW4tPmludGVybmFsRnVuY3Rpb25D
b3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBjYWxsZWVzOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtlZXBBbGl2
ZTsKKyAgICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4gY2FsbGVlczsKKyAg
ICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4ga2VlcEFsaXZlOwogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7CiAgICAgICAgIHBsYW4tPmlu
aXRpYWxpemVDYWxsZWVzKAotICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIGpzRW50cnlwb2ludENh
bGxlZSwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVl
KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxs
ZWVJbmRleCAtIDEgPT0gbGFzdEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBl
bmQoanNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgICAgICBrZWVwQWxpdmUuYXBwZW5k
KHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChX
VEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgIGtlZXBBbGl2ZS5h
cHBlbmQoV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIGxh
c3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzIzOCw3
ICszMjM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAg
ICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0OwogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgICAg
ICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94
ZWRBcmdzKTsKKyAgICAgICAgICAgICAgICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigm
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlc1tpXS5wdHIoKSwgYm94ZWRB
cmdzKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2
bSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJl
Zi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAg
ICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBhbnkg
ZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJhbWUs
IGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAg
ICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAgICAgICAgICAg
IGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYgdmlzaXRvci0+
aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1f
YnVpbGRlcjsKICAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBAIC0yODEsNyAr
MjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxp
bmVOdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNhbGxlZSkKKyAg
ICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdD
YXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk3LDYg
KzE0OTcsNyBAQAogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0Yw
MDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC00MDQ0LDYgKzQwNDUsNyBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAz
MDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE0MUU1RDc5
OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY1QzIxNTFF
NUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTZEQUEyQTFFODlDQ0Q2
MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxsZWVCaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NzM4LDYgKzU3NDAsNyBAQAogCQkJCTBGNTVGMEYxMTREMTA2MzYw
MEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2
NDkgLyogQWJzdHJhY3RQQy5oICovLAogCQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBD
YWNoZWRDYWxsLmggKi8sCisJCQkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLywKIAkJCQkxNDI5RDhEQjBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCAq
LywKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJ
QTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAqLywKQEAgLTg4
NjIsNiArODg2NSw3IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJ
Q0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUg
LyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFC
RkJFNTYxMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
OTZEQUEyQjFFODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3
LDcgKzY4Nyw3IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUludGVybmFsKEMKIAog
dm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0mIHZtID0gbV92bTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAobV9pc1BhdXNlZCkK
QEAgLTcwNiwxMSArNzA2LDExIEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICBwYXVzZU5vdyB8PSAobV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENh
bGxGcmFtZSk7CiAKICAgICBib29sIGRpZFBhdXNlRm9yU3RlcCA9IHBhdXNlTm93OwotICAgIGJv
b2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOwogCiAgICAgQnJlYWtwb2ludCBicmVha3BvaW50
OwotICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlv
bkZvckNhbGxGcmFtZShtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIHBhdXNlTm93IHw9IGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3Np
dGlvbkZvckNhbGxGcmFtZSh2bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBib29sIGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIHBhdXNlTm93IHw9IGRpZEhpdEJyZWFrcG9pbnQ7CiAgICAgbV9sYXN0RXhlY3V0
ZWRMaW5lID0gcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwogICAgIGlmICghcGF1c2VO
b3cpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpw
YXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAgICAgLy8gcmVzZXRpbmcgdGhlIHBhdXNlIHN0YXRl
IGJlZm9yZSBleGVjdXRpbmcgYW55IGJyZWFrcG9pbnQgYWN0aW9ucy4KICAgICBUZW1wb3JhcnlQ
YXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogdm1F
bnRyeUdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KHZtKTsKIAogICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CiAgICAgICAg
IGhhbmRsZUJyZWFrcG9pbnRIaXQodm1FbnRyeUdsb2JhbE9iamVjdCwgYnJlYWtwb2ludCk7CkBA
IC05MTYsNyArOTE2LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxG
cgogRGVidWdnZXJDYWxsRnJhbWUmIERlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUo
KQogewogICAgIGlmICghbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpCi0gICAgICAgIG1fY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShtX2N1cnJl
bnRDYWxsRnJhbWUpOworICAgICAgICBtX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVn
Z2VyQ2FsbEZyYW1lOjpjcmVhdGUobV92bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICByZXR1
cm4gKm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE2ICs2MCwxNiBAQCBwcml2YXRlOgog
ICAgIG11dGFibGUgdW5zaWduZWQgbV9jb2x1bW47CiB9OwogCi1SZWY8RGVidWdnZXJDYWxsRnJh
bWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitSZWY8
RGVidWdnZXJDYWxsRnJhbWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lID09IGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKSB7CisgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPndhc21Bd2FyZUxleGljYWxHbG9iYWxPYmpl
Y3Qodm0pLT5nbG9iYWxFeGVjKCkpKSB7CiAgICAgICAgIFNoYWRvd0NoaWNrZW46OkZyYW1lIGVt
cHR5RnJhbWU7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbXB0eUZyYW1lLmlzVGFpbERlbGV0
ZWQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWJ1Z2dlckNhbGxGcmFtZShjYWxs
RnJhbWUsIGVtcHR5RnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVidWdn
ZXJDYWxsRnJhbWUodm0sIGNhbGxGcmFtZSwgZW1wdHlGcmFtZSkpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxTaGFkb3dDaGlja2VuOjpGcmFtZT4gZnJhbWVzOwotICAgIGNhbGxGcmFtZS0+dm0oKS5z
aGFkb3dDaGlja2VuKCkuaXRlcmF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgWyZdIChj
b25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpIC0+IGJvb2wgeworICAgIHZtLnNoYWRv
d0NoaWNrZW4oKS5pdGVyYXRlKHZtLCBjYWxsRnJhbWUsIFsmXSAoY29uc3QgU2hhZG93Q2hpY2tl
bjo6RnJhbWUmIGZyYW1lKSAtPiBib29sIHsKICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwpAQCAtNzgsMjQgKzc4LDI0IEBAIFJlZjxE
ZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJhbWUKICAgICBBU1NFUlQoIWZyYW1lc1sw
XS5pc1RhaWxEZWxldGVkKTsgLy8gVGhlIHRvcCBmcmFtZSBzaG91bGQgbmV2ZXIgYmUgdGFpbCBk
ZWxldGVkLgogCiAgICAgUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50UGFyZW50ID0g
bnVsbHB0cjsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNhbGxGcmFtZS0+
d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCh2bSktPmdsb2JhbEV4ZWMoKTsKICAgICAvLyBU
aGlzIHdhbGtzIHRoZSBzdGFjayBmcm9tIHRoZSBlbnRyeSBzdGFjayBmcmFtZSB0byB0aGUgdG9w
IG9mIHRoZSBzdGFjay4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcmFtZXMuc2l6ZSgpOyBpLS07
ICkgewogICAgICAgICBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUgPSBmcmFtZXNb
aV07CiAgICAgICAgIGlmICghZnJhbWUuaXNUYWlsRGVsZXRlZCkKICAgICAgICAgICAgIGV4ZWMg
PSBmcmFtZS5mcmFtZTsKLSAgICAgICAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50RnJh
bWUgPSBhZG9wdFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKGV4ZWMsIGZyYW1lKSk7CisgICAg
ICAgIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3VycmVudEZyYW1lID0gYWRvcHRSZWYoKm5ldyBE
ZWJ1Z2dlckNhbGxGcmFtZSh2bSwgZXhlYywgZnJhbWUpKTsKICAgICAgICAgY3VycmVudEZyYW1l
LT5tX2NhbGxlciA9IGN1cnJlbnRQYXJlbnQ7CiAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBXVEZN
b3ZlKGN1cnJlbnRGcmFtZSk7CiAgICAgfQogICAgIHJldHVybiAqY3VycmVudFBhcmVudDsKIH0K
IAotRGVidWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpCitEZWJ1Z2dlckNhbGxGcmFt
ZTo6RGVidWdnZXJDYWxsRnJhbWUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
U2hhZG93Q2hpY2tlbjo6RnJhbWUmIGZyYW1lKQogICAgIDogbV92YWxpZE1hY2hpbmVGcmFtZShj
YWxsRnJhbWUpCiAgICAgLCBtX3NoYWRvd0NoaWNrZW5GcmFtZShmcmFtZSkKIHsKLSAgICBtX3Bv
c2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CisgICAgbV9wb3NpdGlvbiA9IGN1cnJlbnRQb3Np
dGlvbih2bSk7CiB9CiAKIFJlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJh
bWU6OmNhbGxlckZyYW1lKCkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIERlYnVnZ2VyQ2FsbEZy
YW1lOjppbnZhbGlkYXRlKCkKICAgICB9CiB9CiAKLVRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxG
cmFtZTo6Y3VycmVudFBvc2l0aW9uKCkKK1RleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6
Y3VycmVudFBvc2l0aW9uKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fdmFsaWRNYWNoaW5lRnJhbWUp
CiAgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24oKTsKQEAgLTI5NywxMyArMjk3LDEzIEBAIFRl
eHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFAKICAgICAgICAgfQogICAgIH0K
IAotICAgIHJldHVybiBwb3NpdGlvbkZvckNhbGxGcmFtZShtX3ZhbGlkTWFjaGluZUZyYW1lKTsK
KyAgICByZXR1cm4gcG9zaXRpb25Gb3JDYWxsRnJhbWUodm0sIG1fdmFsaWRNYWNoaW5lRnJhbWUp
OwogfQogCi1UZXh0UG9zaXRpb24gRGVidWdnZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQorVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1l
Ojpwb3NpdGlvbkZvckNhbGxGcmFtZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewog
ICAgIExpbmVBbmRDb2x1bW5GdW5jdG9yIGZ1bmN0b3I7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRl
KGZ1bmN0b3IpOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0
b3IpOwogICAgIHJldHVybiBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KGZ1bmN0b3IubGluZSgpKSwgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGZ1bmN0
b3IuY29sdW1uKCkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lIDogcHVibGljIFJl
ZkNvdW4KIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBl
IH07CiAKLSAgICBzdGF0aWMgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjcmVhdGUoQ2FsbEZyYW1l
Kik7CisgICAgc3RhdGljIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3JlYXRlKFZNJiwgQ2FsbEZy
YW1lKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+
IGNhbGxlckZyYW1lKCk7CiAgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7CkBAIC02OSwxNCAr
NjksMTQgQEAgcHVibGljOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgcHVibGljIGZv
ciB0aGUgRGVidWdnZXIncyB1c2Ugb25seS4gVGhleSB3aWxsIGJlCiAgICAgLy8gbWFkZSBwcml2
YXRlIHNvb24uIE90aGVyIGNsaWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlc2UuCiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0aW9uKCk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3NpdGlvbkZvckNhbGxGcmFtZShDYWxs
RnJhbWUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3Np
dGlvbkZvckNhbGxGcmFtZShWTSYsIENhbGxGcmFtZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTb3VyY2VJRCBzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAogICAg
IGJvb2wgaXNUYWlsRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Q2hpY2tlbkZyYW1l
LmlzVGFpbERlbGV0ZWQ7IH0KIAogcHJpdmF0ZToKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxs
RnJhbWUqLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYpOworICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmKTsKIAogICAg
IENhbGxGcmFtZSogbV92YWxpZE1hY2hpbmVGcmFtZTsKICAgICBSZWZQdHI8RGVidWdnZXJDYWxs
RnJhbWU+IG1fY2FsbGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0xODUsNyArMTg2LDggQEAgUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFs
KAogCiBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0KCkKIHsK
LSAgICBpZiAoY2FsbGVlKCktPmlzT2JqZWN0KCkpIHsgCisgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bGVlKCkuaXNDZWxsKCkpOworICAgIGlmIChjYWxsZWUoKS5hc0NlbGwoKS0+aXNPYmplY3QoKSkg
eyAKICAgICAgICAgaWYgKHRoaXMgPT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpCiAgICAgICAgICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIH0KQEAg
LTE5Nyw2ICsxOTksMjggQEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6dm1FbnRyeUdsb2Jh
bAogICAgIHJldHVybiB2bSgpLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpOwogfQogCitKU0ds
b2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0KFZNJiB2bSkKK3sKKyAg
ICBpZiAoIWNhbGxlZSgpLmlzV2FzbSgpICYmIGNhbGxlZSgpLmFzQ2VsbCgpLT5pc09iamVjdCgp
KSB7CisgICAgICAgIGlmICh0aGlzID09IGxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpKQorICAgICAgICAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICB9CisK
KyAgICAvLyBJZiB3ZSdyZSBub3QgYW4gb2JqZWN0LCB3ZSdyZSB3YXNtLCBhbmQgdGhlcmVmb3Jl
IHdlJ3JlIGV4ZWN1dGluZyBjb2RlIGFuZCB0aGUgYmVsb3cgaXMgc2FmZS4KKworICAgIC8vIEZv
ciBhbnkgRXhlY1N0YXRlIHRoYXQncyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCisgICAgLy8gZHlu
YW1pYyBnbG9iYWwgb2JqZWN0IG11c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVubmluZworICAg
IEFTU0VSVCh2bS5lbnRyeVNjb3BlKTsKKyAgICByZXR1cm4gdm0uZW50cnlTY29wZS0+Z2xvYmFs
T2JqZWN0KCk7Cit9CisKK0pTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGlj
YWxHbG9iYWxPYmplY3QoVk0mIHZtKQoreworICAgIGlmICghY2FsbGVlKCkuaXNXYXNtKCkpCisg
ICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIFdhc206Omxv
YWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7Cit9CisKIENhbGxGcmFtZSogQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRyeUZyYW1lKQogewogICAgIGlm
IChjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewpAQCAt
MjE5LDkgKzI0MywxMSBAQCBTVVBQUkVTU19BU0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1bnNh
CiAKIFNvdXJjZU9yaWdpbiBDYWxsRnJhbWU6OmNhbGxlclNvdXJjZU9yaWdpbigpCiB7CisgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlKCkuaXNDZWxsKCkpOworICAgIFZNKiB2bSA9ICZ0aGlzLT52
bSgpOwogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW47CiAgICAgYm9vbCBoYXZlU2tpcHBl
ZEZpcnN0RnJhbWUgPSBmYWxzZTsKLSAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHRoaXMsIFsmXShT
dGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHRoaXMsIHZt
LCBbJl0oU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgIGlmICghc3RkOjpleGNoYW5n
ZShoYXZlU2tpcHBlZEZpcnN0RnJhbWUsIHRydWUpKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNr
VmlzaXRvcjo6U3RhdHVzOjpDb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMuaCIK
KyNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKQEAg
LTg2LDkgKzg3LDE3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCArIDE7CiAKLSAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsgfQotICAgICAg
ICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6
OmNhbGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUoKSBjb25zdCB7IHJl
dHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5ib3hlZENlbGwoKTsgfQorICAgICAg
ICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzW0NhbGxG
cmFtZVNsb3Q6OmNhbGxlZV0uanNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIEpTT2JqZWN0
KiBqc0NhbGxlZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbGVl
KCkuaXNXYXNtKCkpOworICAgICAgICAgICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlXS5vYmplY3QoKTsKKyAgICAgICAgfQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIENhbGxlZUJpdHModGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50
ZXIoKSk7IH0KICAgICAgICAgU1VQUFJFU1NfQVNBTiBKU1ZhbHVlIHVuc2FmZUNhbGxlZSgpIGNv
bnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlSlNWYWx1
ZSgpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gdGhp
c1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2RlQmxvY2soKTsgfQogICAg
ICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9
CkBAIC0xMDAsOCArMTA5LDE1IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgorICAgICAgICAv
LyBUaGlzIGlzIG5vdCBzYWZlIHRvIGNhbGwgZnJvbSBhIFdhc20gZnJhbWUuCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAK
KyAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCisgICAg
ICAgIC8vIFRoaXMgaXMgc2FmZSB0byBjYWxsIGZyb20gYSBXYXNtIGZyYW1lLgorICAgICAgICBK
U0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdChWTSYpOworCisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiB3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJik7CisKICAgICAgICAg
Ly8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb2RlIHdh
cyBkZWZpbmVkLgogICAgICAgICAvLyBEaWZmZXJzIGZyb20gdm1FbnRyeUdsb2JhbE9iamVjdCgp
IGR1cmluZyBmdW5jdGlvbiBjYWxscyBhY3Jvc3Mgd2ViIGJyb3dzZXIgZnJhbWVzLgogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0OwpAQCAtMjU3LDkg
KzI3MywxOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vICAgICBTdGFja1Zpc2l0b3I6
OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYpIGNvbnN0OwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBtZXRob2QgaXMgaW1wcm9wZXIuIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSBj
YW4gY2FsbCBpdCB3aXRoIGEgbnVsbAogICAgICAgICAvLyByZWNlaXZlci4gV2Ugc2hvdWxkIGFs
d2F5cyBiZSB1c2luZyBTdGFja1Zpc2l0b3IgZGlyZWN0bHkuCisgICAgICAgIC8vIEl0J3Mgb25s
eSB2YWxpZCB0byBjYWxsIHRoaXMgZnJvbSBhIG5vbi13YXNtIHRvcCBmcmFtZS4KICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0PEZ1bmN0
b3I+KHRoaXMsIGZ1bmN0b3IpOworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9p
ZCogcGxlYXNlRklYTUUgPSB0aGlzOworICAgICAgICAgICAgaWYgKCEhcGxlYXNlRklYTUUpIHsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAg
ICAgICAgICAgICAgdm0gPSAmdGhpcy0+dm0oKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIHZtID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxl
ZSgpLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVuY3Rvcj4o
dGhpcywgdm0sIGZ1bmN0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVl
Qml0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsZWVCaXRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxlZUJpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1l
c3BhY2UgV2FzbSB7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxlZTsKK30KKworY2xhc3MgSlNDZWxs
OworCitjbGFzcyBDYWxsZWVCaXRzIHsKK3B1YmxpYzoKKyAgICBDYWxsZWVCaXRzKCkgPSBkZWZh
dWx0OworICAgIENhbGxlZUJpdHModm9pZCogcHRyKSA6IG1fcHRyKHB0cikgeyB9IAorCisgICAg
Q2FsbGVlQml0cyYgb3BlcmF0b3I9KEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIG1fcHRy
ID0gY2VsbDsKKyAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIGJvb2wgaXNXYXNtKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obV9wdHIpICYgMTsgfQorICAgIGJvb2wgaXNDZWxsKCkgY29uc3QgeyByZXR1
cm4gIWlzV2FzbSgpOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogYXNDZWxsKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNXYXNtKCkpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4obV9wdHIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgV2Fz
bTo6V2ViQXNzZW1ibHlDYWxsZWUqIGFzV2FzbUNhbGxlZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNXYXNtKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdhc206Oldl
YkFzc2VtYmx5Q2FsbGVlKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wdHIpICYgfjEpOwor
ICAgIH0KKworICAgIHZvaWQqIHJhd1B0cigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAg
Citwcml2YXRlOgorICAgIHZvaWQqIG1fcHRyIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Miwx
NCArNDcyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3JlbWFpbmlu
Z0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7Ci0gICAgICAgICAgICBpZiAoIXZpc2l0b3ItPmlz
V2FzbUZyYW1lKCkKLSAgICAgICAgICAgICAgICAmJiAhIXZpc2l0b3ItPmNvZGVCbG9jaygpCi0g
ICAgICAgICAgICAgICAgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygpLT51bmxpbmtlZENvZGVCbG9j
aygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CisgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNX
YXNtRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKFN0YWNrRnJhbWU6
Ondhc20oKSk7CisgICAgICAgICAgICBlbHNlIGlmICghIXZpc2l0b3ItPmNvZGVCbG9jaygpICYm
ICF2aXNpdG9yLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVu
Y3Rpb24oKSkgewogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoCi0gICAgICAgICAg
ICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2FsbGVlKCksIHZpc2l0b3ItPmNv
ZGVCbG9jaygpLCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCksIHZpc2l0b3It
PmNvZGVCbG9jaygpLCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgICAgIFN0YWNrRnJhbWUobV92bSwgIHZpc2l0b3ItPmNhbGxlZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKTsK
ICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JG
cmFtZUNhcHR1cmUtLTsKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIEludGVycHJldGVyOjpnZXRT
dGFja1RyYWNlKFZlY3RvcjxTCiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVfdCBmcmFtZXND
b3VudCA9IDA7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKFsmXSAoU3RhY2tWaXNpdG9yJikgLT4g
U3RhY2tWaXNpdG9yOjpTdGF0dXMgeworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1l
LCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgewogICAg
ICAgICBmcmFtZXNDb3VudCsrOwogICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51
ZTsKICAgICB9KTsKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEludGVycHJldGVyOjpnZXRTdGFj
a1RyYWNlKFZlY3RvcjxTCiAgICAgZnJhbWVzQ291bnQgPSBzdGQ6Om1pbihtYXhTdGFja1NpemUs
IGZyYW1lc0NvdW50KTsKIAogICAgIEdldFN0YWNrVHJhY2VGdW5jdG9yIGZ1bmN0b3Iodm0sIHJl
c3VsdHMsIGZyYW1lc1RvU2tpcCwgZnJhbWVzQ291bnQpOwotICAgIGNhbGxGcmFtZS0+aXRlcmF0
ZShmdW5jdG9yKTsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBmdW5j
dG9yKTsKICAgICBBU1NFUlQocmVzdWx0cy5zaXplKCkgPT0gcmVzdWx0cy5jYXBhY2l0eSgpKTsK
IH0KIApAQCAtNTc1LDEzICs1NzUsMTQgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEhhbmRsZXJJ
bmZvKiBtX2hhbmRsZXI7CiB9OwogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURl
YnVnZ2VyT2ZVbndpbmRpbmcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBjYXRj
aFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgaWYgKERlYnVnZ2VyKiBkZWJ1
Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Cisg
ICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVj
dCh2bSktPmRlYnVnZ2VyKCkpIHsKICAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3Bl
KCZ2bSk7Ci0gICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKSkKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkuaXNXYXNt
KCkKKyAgICAgICAgICAgIHx8IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxGcmFtZS0+Y2Fs
bGVlKCkuYXNDZWxsKCkpCisgICAgICAgICAgICB8fCBjYWxsRnJhbWUtPmNhbGxlZSgpLmFzQ2Vs
bCgpLT5pbmhlcml0cyh2bSwgSlNGdW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgICAgIGRlYnVn
Z2VyLT51bndpbmRFdmVudChjYWxsRnJhbWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBk
ZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lKTsKQEAgLTU5MSw4ICs1OTIsOSBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyCiAKIGNsYXNzIFVud2lu
ZEZ1bmN0b3IgewogcHVibGljOgotICAgIFVud2luZEZ1bmN0b3IoQ2FsbEZyYW1lKiYgY2FsbEZy
YW1lLCBib29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlcklu
Zm8qJiBoYW5kbGVyKQotICAgICAgICA6IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKKyAgICBVbndp
bmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWluYXRp
b24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBoYW5kbGVyKQorICAgICAg
ICA6IG1fdm0odm0pCisgICAgICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAgICAs
IG1faXNUZXJtaW5hdGlvbihpc1Rlcm1pbmF0aW9uKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKICAgICAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKQEAgLTYxNCw3ICs2MTYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBub3RpZnlEZWJ1
Z2dlck9mVW53aW5kaW5nKG1fY2FsbEZyYW1lKTsKKyAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVu
d2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2aXNpdG9yKTsKIApAQCAtNjM0LDEzICs2MzYs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFjdXJyZW50Q2FsbGVlU2F2ZXMpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgVk0mIHZtID0gbV9jYWxsRnJhbWUtPnZtKCk7CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxs
ZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIGludHB0cl90
KiBmcmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0
ZXJzKCkpOwogCiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVl
U2F2ZXMtPnNpemUoKTsKLSAgICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJl
Y29yZCh2bS50b3BWTUVudHJ5RnJhbWUpOworICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQg
PSB2bUVudHJ5UmVjb3JkKG1fdm0udG9wVk1FbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBjdXJyZW50RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpA
QCAtNjU0LDYgKzY1NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAKKyAgICBWTSYgbV92
bTsKICAgICBDYWxsRnJhbWUqJiBtX2NhbGxGcmFtZTsKICAgICBib29sIG1faXNUZXJtaW5hdGlv
bjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9jazsKQEAgLTY4NiwxOCArNjg4LDE3IEBAIE5F
VkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKIAogICAgIC8vIENhbGN1bGF0
ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNl
c3NhcnkuCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBudWxscHRyOwotICAgIFVud2luZEZ1
bmN0b3IgZnVuY3RvcihjYWxsRnJhbWUsIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2
bSwgZXhjZXB0aW9uKSwgY29kZUJsb2NrLCBoYW5kbGVyKTsKLSAgICBjYWxsRnJhbWUtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgVW53aW5kRnVuY3RvciBmdW5jdG9yKHZtLCBjYWxsRnJhbWUsIGlz
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSwgY29kZUJsb2NrLCBo
YW5kbGVyKTsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBmdW5jdG9y
KTsKICAgICBpZiAoIWhhbmRsZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0
dXJuIGhhbmRsZXI7CiB9CiAKLXZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNl
cHRpb25Ub0JlVGhyb3duKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlv
bikKK3ZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3du
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewot
ICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKLSAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBj
YWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dl
ciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3Qodm0pLT5kZWJ1Z2dl
cigpOwogICAgIGlmIChkZWJ1Z2dlciAmJiBkZWJ1Z2dlci0+bmVlZHNFeGNlcHRpb25DYWxsYmFj
a3MoKSAmJiAhZXhjZXB0aW9uLT5kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkpIHsKICAgICAg
ICAgLy8gVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBpZiB0aGUgZGVidWdnZXIgaXMgZW5hYmxlZCB0
aGVuIHRoZXJlIGlzIG5vIGlubGluaW5nLgogICAgICAgICAvLyBJZiB0aGF0IGFzc3VtcHRpb24g
dHVybnMgb3V0IHRvIGJlIGZhbHNlIHRoZW4gd2UnbGwgaWdub3JlIHRoZSBpbmxpbmVkIGNhbGwK
QEAgLTcxMCw3ICs3MTEsNyBAQCB2b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhj
ZXB0CiAgICAgICAgICAgICBoYXNDYXRjaEhhbmRsZXIgPSBmYWxzZTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBHZXRDYXRjaEhhbmRsZXJGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgICAgICAgICBTdGFja1Zpc2l0b3I6
OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBmdW5jdG9yKTsKICAgICAgICAgICAgIEhhbmRsZXJJbmZv
KiBoYW5kbGVyID0gZnVuY3Rvci5oYW5kbGVyKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWhhbmRs
ZXIgfHwgaGFuZGxlci0+aXNDYXRjaEhhbmRsZXIoKSk7CiAgICAgICAgICAgICBoYXNDYXRjaEhh
bmRsZXIgPSAhIWhhbmRsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
OCw3ICsxMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNE
YXRhKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlcklu
ZGV4LCBSZWdpc3RlciomIGFyZ3YsIGludCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24q
LCBVbndpbmRTdGFydCk7Ci0gICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRv
QmVUaHJvd24oQ2FsbEZyYW1lKiwgRXhjZXB0aW9uKik7CisgICAgICAgIHZvaWQgbm90aWZ5RGVi
dWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mLCBDYWxsRnJhbWUqLCBFeGNlcHRpb24qKTsK
ICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rVHlw
ZSk7CiAgICAgICAgIHN0YXRpYyBKU1N0cmluZyogc3RhY2tUcmFjZUFzU3RyaW5nKFZNJiwgY29u
c3QgVmVjdG9yPFN0YWNrRnJhbWU+Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NiArNzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50MzJfdCYgcGF5bG9hZCgpOwog
ICAgICAgICBpbnQzMl90JiB0YWcoKTsKIAorICAgICAgICB2b2lkKiBwb2ludGVyKCkgY29uc3Q7
CisKICAgICAgICAgc3RhdGljIFJlZ2lzdGVyIHdpdGhJbnQoaW50MzJfdCBpKQogICAgICAgICB7
CiAgICAgICAgICAgICBSZWdpc3RlciByID0ganNOdW1iZXIoaSk7CkBAIC0xOTUsNiArMTk3LDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2
b2lkKiBSZWdpc3Rlcjo6cG9pbnRlcigpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIHJldHVybiB1LmVuY29kZWRWYWx1ZS5wdHI7CisjZWxzZQorICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqPihwYXlsb2FkKCkpOworI2VuZGlmCisgICAgfQorCiAgICAg
QUxXQVlTX0lOTElORSBpbnQzMl90IFJlZ2lzdGVyOjpwYXlsb2FkKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiB1LmVuY29kZWRWYWx1ZS5hc0JpdHMucGF5bG9hZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJ
KHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
U2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAgICBpZiAoIW1fc3RhY2suaXNF
bXB0eSgpKSB7CiAgICAgICAgIFZlY3RvcjxGcmFtZT4gc3RhY2tSaWdodE5vdzsKICAgICAgICAg
U3RhY2tWaXNpdG9yOjp2aXNpdCgKLSAgICAgICAgICAgIGV4ZWMsIFsmXSAoU3RhY2tWaXNpdG9y
JiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CisgICAgICAgICAgICBleGVjLCAm
dm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7
CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKSB7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9p
ZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAgICAgICAgICAgICAgIGJv
b2wgaXNUYWlsRGVsZXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtl
IHNoYWRvdyBjaGlja2VuIHdvcmsgd2l0aCBXYXNtLgogICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0NDEKLSAgICAgICAgICAgICAg
ICBzdGFja1JpZ2h0Tm93LmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5j
YWxsZWUoKSksIHZpc2l0b3ItPmNhbGxGcmFtZSgpLCBpc1RhaWxEZWxldGVkKSk7CisgICAgICAg
ICAgICAgICAgc3RhY2tSaWdodE5vdy5hcHBlbmQoRnJhbWUoanNDYXN0PEpTT2JqZWN0Kj4odmlz
aXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpLCB2aXNpdG9yLT5jYWxsRnJhbWUoKSwgaXNUYWlsRGVs
ZXRlZCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIHN0YWNrUmlnaHROb3cucmV2ZXJzZSgpOwpAQCAtMjcz
LDcgKzI3Myw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAg
ICAKICAgICBWZWN0b3I8RnJhbWU+IHRvUHVzaDsKICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KAot
ICAgICAgICBleGVjLCBbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNpdG9y
OjpTdGF0dXMgeworICAgICAgICBleGVjLCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9y
KSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNJ
bmxpbmVkRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgaW5saW5p
bmcuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NTY4NgpAQCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBk
YXRlKFZNJiB2bSwgRXhlY1MKICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCiAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLT5pbmhlcml0cyh2bSwgSlNTY29wZTo6aW5m
bygpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b1B1c2guYXBwZW5kKEZyYW1lKGpz
Q2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKSwgY2FsbEZyYW1lLCBpc1RhaWxEZWxl
dGVkLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUt
PmNhbGxTaXRlSW5kZXgoKSkpOworICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZShqc0Nh
c3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSksIGNhbGxGcmFtZSwgaXNU
YWlsRGVsZXRlZCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgc2NvcGUsIGNvZGVCbG9jaywgY2Fs
bEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpKTsKIAogICAgICAgICAgICAgaWYgKGluZGV4SW5Mb2cg
PCBsb2dDdXJzb3JJbmRleAogICAgICAgICAgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIHByb3Rl
Y3RzIHVzIGZyb20gdGhlIGNhc2Ugd2hlcmUgYWR2YW5jZUluZGV4SW5Mb2dUbyBkaWRuJ3QgZmlu
ZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW5J
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1NoYWRvd0NoaWNrZW5JbmxpbmVzLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KIHZvaWQgU2hhZG93Q2hpY2tlbjo6aXRlcmF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBEZWZlckdDIGRlZmVyR0MoZXhl
Yy0+dm0oKS5oZWFwKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAKICAgICB1cGRh
dGUodm0sIGV4ZWMpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxNCArMzYsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0YWNrVmlzaXRv
cjo6U3RhY2tWaXNpdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSkKK1N0YWNrVmlzaXRvcjo6U3Rh
Y2tWaXNpdG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtKQogewogICAgIG1fZnJhbWUu
bV9pbmRleCA9IDA7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAgICAgQ2Fs
bEZyYW1lKiB0b3BGcmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewotICAgICAgICBtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lID0gc3RhcnRGcmFtZS0+dm0oKS50b3BWTUVudHJ5RnJhbWU7Ci0gICAg
ICAgIHRvcEZyYW1lID0gc3RhcnRGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgICAgIEFT
U0VSVCh2bSk7CisgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRy
eUZyYW1lOworICAgICAgICB0b3BGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAgIAog
ICAgICAgICBpZiAodG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9WTUVu
dHJ5RnJhbWUpID09IHN0YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKICAgICAgICAgICAg
IHRvcEZyYW1lID0gdm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2
VG9wQ2FsbEZyYW1lOwpAQCAtMTAzLDcgKzEwNCw4IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFk
RnJhbWUoQ2FsbEZyYW1lKiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChjYWxs
RnJhbWUtPmNhbGxlZSgpLT5pc0FueVdhc21DYWxsZWUoY2FsbEZyYW1lLT52bSgpKSkgeworICAg
IGlmICghIWNhbGxGcmFtZS0+Y2FsbGVlKCkucmF3UHRyKCkKKyAgICAgICAgJiYgKGNhbGxGcmFt
ZS0+Y2FsbGVlKCkuaXNXYXNtKCkgfHwgaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbEZyYW1l
LT5jYWxsZWUoKS5hc0NlbGwoKSkpKSB7CiAgICAgICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NSwxMCArMTU3LDExIEBAIHZv
aWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKEMKICAgICBtX2ZyYW1lLm1fY2Fs
bGVySXNWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lICE9IG1fZnJh
bWUubV9WTUVudHJ5RnJhbWU7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAK
LSAgICBKU0NlbGwqIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgQ2FsbGVlQml0
cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIG1fZnJhbWUubV9jYWxsZWUgPSBj
YWxsZWU7CiAKLSAgICBpZiAoY2FsbGVlLT5pc0FueVdhc21DYWxsZWUoKmNhbGxlZS0+dm0oKSkp
IHsKKyAgICBpZiAoISFjYWxsZWUucmF3UHRyKCkKKyAgICAgICAgJiYgKGNhbGxlZS5pc1dhc20o
KSB8fCBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZWUuYXNDZWxsKCkpKSkgewogICAgICAg
ICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJs
b2NrID0gbnVsbHB0cjsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gMDsKQEAg
LTIwNCw3ICsyMDcsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxs
CiAKICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVG
b3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgbV9mcmFtZS5tX2NhbGxlZSA9IGNhbGxl
ZTsKLSAgICAgICAgQVNTRVJUKG1fZnJhbWUuY2FsbGVlKCkpOworICAgICAgICBBU1NFUlQoISFt
X2ZyYW1lLmNhbGxlZSgpLnJhd1B0cigpKTsKIAogICAgICAgICAvLyBUaGUgY2FsbGVyRnJhbWUg
anVzdCBuZWVkcyB0byBiZSBub24tbnVsbCB0byBpbmRpY2F0ZSB0aGF0IHdlCiAgICAgICAgIC8v
IGhhdmVuJ3QgcmVhY2hlZCB0aGUgbGFzdCBmcmFtZSB5ZXQuIFNldHRpbmcgaXQgdG8gdGhlIHJv
b3QKQEAgLTI1NCwxNCArMjU3LDEyIEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0
b3I6OkZyYW0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoaXNXYXNtRnJhbWUo
KSkgewotICAgICAgICBpZiAoSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKSkgewotICAg
ICAgICAgICAgaWYgKEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBqc0R5bmFtaWND
YXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPigqY2FsbGVlLT52bSgpLCBjYWxsZWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB3YXNtQ2FsbGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgICAgICAvLyBPdGhlciB3YXNtIGNhbGxlZXMgKGUuZywgc3R1YnMpIGRvbid0IHVzZSBjYWxs
ZWUgc2F2ZSByZWdpc3RlcnMsIHNvIG5vdGhpbmcgbmVlZHMKLSAgICAgICAgICAgIC8vIHRvIGJl
IHJlc3RvcmVkIGZvciB0aGVtLgorICAgICAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZWUoKS5hc0NlbGwo
KSkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxs
ZWUgPSBjYWxsZWUoKS5hc1dhc21DYWxsZWUoKTsKKyAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUt
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQogCkBAIC0yNzYsNyArMjc3LDYgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlz
aXRvcjo6RnJhbQogU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNv
bnN0CiB7CiAgICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMt
PmNhbGxlZSgpOwogCiAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBDb2RlVHlw
ZTo6V2FzbToKQEAgLTI4OCwxMiArMjg4LDE0IEBAIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1l
OjpmdW5jdGlvbk5hbWUKICAgICBjYXNlIENvZGVUeXBlOjpNb2R1bGU6CiAgICAgICAgIHRyYWNl
TGluZSA9IEFTQ0lJTGl0ZXJhbCgibW9kdWxlIGNvZGUiKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDb2RlVHlwZTo6TmF0aXZlOgorICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZTogeworICAg
ICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOwogICAgICAgICBp
ZiAoY2FsbGVlKQogICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlO
YW1lKGNhbGxGcmFtZSgpLT52bSgpLCBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsZWUpKS5pbXBsKCk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgotICAgICAgICB0
cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCktPnZtKCksIGpz
Q2FzdDxKU09iamVjdCo+KGNhbGxlZSkpLmltcGwoKTsKKyAgICB9CisgICAgY2FzZSBDb2RlVHlw
ZTo6RnVuY3Rpb246IAorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5h
bWUoY2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KHRoaXMtPmNhbGxlZSgpLmFz
Q2VsbCgpKSkuaW1wbCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVUeXBlOjpHbG9i
YWw6CiAgICAgICAgIHRyYWNlTGluZSA9IEFTQ0lJTGl0ZXJhbCgiZ2xvYmFsIGNvZGUiKTsKQEAg
LTQ1NSw3ICs0NTcsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJl
CiAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiSW5saW5lQ2FsbEZyYW1lOiAiLCBSYXdQ
b2ludGVyKG1faW5saW5lQ2FsbEZyYW1lKSwgIlxuIik7CiAjZW5kaWYKIAotICAgICAgICBvdXQu
cHJpbnQoaW5kZW50LCAiY2FsbGVlOiAiLCBSYXdQb2ludGVyKGNhbGxlZSgpKSwgIlxuIik7Cisg
ICAgICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCku
cmF3UHRyKCkpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KGluZGVudCwgInJldHVyblBDOiAi
LCBSYXdQb2ludGVyKHJldHVyblBDKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChpbmRlbnQs
ICJjYWxsZXJGcmFtZTogIiwgUmF3UG9pbnRlcihjYWxsZXJGcmFtZSksICJcbiIpOwogICAgICAg
ICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmNhbGxTaXRlQXNSYXdCaXRz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiVk1F
bnRyeVJlY29yZC5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0luZGVu
dGVyLmg+CkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsgfQogICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQotICAgICAgICBKU0NlbGwq
IGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CisgICAgICAgIENhbGxlZUJpdHMg
Y2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKSBjb25zdCB7CkBAIC0xMTAs
NyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1l
OwogICAgICAgICBWTUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOwogICAgICAgICBD
YWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7Ci0gICAgICAgIEpTQ2VsbCogbV9jYWxsZWU7CisgICAg
ICAgIENhbGxlZUJpdHMgbV9jYWxsZWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsKQEAgLTEzMCw5ICsxMzEsOSBAQCBwdWJsaWM6CiAgICAgLy8gICAgIFN0
YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgdmlzaXQoQ2FsbEZyYW1lKiBzdGFydEZy
YW1lLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHN0YXRpYyB2b2lkIHZpc2l0KENhbGxG
cmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsK
LSAgICAgICAgU3RhY2tWaXNpdG9yIHZpc2l0b3Ioc3RhcnRGcmFtZSk7CisgICAgICAgIFN0YWNr
VmlzaXRvciB2aXNpdG9yKHN0YXJ0RnJhbWUsIHZtKTsKICAgICAgICAgd2hpbGUgKHZpc2l0b3It
PmNhbGxGcmFtZSgpKSB7CiAgICAgICAgICAgICBTdGF0dXMgc3RhdHVzID0gZnVuY3Rvcih2aXNp
dG9yKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ29udGludWUpCkBAIC0xNDYsNyArMTQ3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW53aW5kVG9NYWNoaW5lQ29kZUJsb2NrRnJhbWUoKTsK
IAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Zpc2l0b3IoQ2FsbEZyYW1l
KiBzdGFydEZyYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Zpc2l0b3IoQ2FsbEZy
YW1lKiBzdGFydEZyYW1lLCBWTSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnb3Rv
TmV4dEZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk1LDExICs1OTUsMTUgQEAgdm9pZCBsaW5rRm9yKAogICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKKyAgICAvLyBPdXIgY2FsbGVyIG11c3QgYmUgaGF2
ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKKyAgICAvLyB0aGlzIGZyb20gV2Fz
bSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAgIEFTU0VSVChjYWxsZXJGcmFt
ZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCiAgICAgVk0mIHZtID0gY2FsbGVyRnJhbWUtPnZtKCk7
CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAKICAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQg
Q29kZUJsb2NrLgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2Fs
bGVlKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2Vt
Ymx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1i
bHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2Nr
OwogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtl
ZCgpKTsKQEAgLTcxNywxMiArNzIxLDE3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAg
ICB9CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsK
KworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdo
ZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBp
cyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisK
ICAgICBWTSYgdm0gPSBjYWxsZXJGcmFtZS0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBib29sIGlzV2ViQXNzZW1i
bHkgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpOworICAg
IGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1l
LT5jYWxsZWUoKS5hc0NlbGwoKSk7CiAKICAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBk
b24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFz
c2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpIDogY2FsbGVy
Q29kZUJsb2NrOworICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1i
bHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2Nr
OwogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHJldmlzaW9uIDIxNDgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZz
ZXQoRXgKIAogICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQpIHsKICAgICAgICAgICAgIEZpbmRG
aXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKLSAgICAg
ICAgICAgIHZtLnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICAgICAgICAgIFN0
YWNrVmlzaXRvcjo6dmlzaXQodm0udG9wQ2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgICAg
ICAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwogICAgICAgICAgICAg
dW5zaWduZWQgc3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKICAgICAgICAgICAgICpieXRl
Y29kZU9mZnNldCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw4
ICsxNTYsMTAgQEAgdm9pZCBFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihFeGVjUwogICAg
IGJvb2wgaGFzVHJhY2UgPSBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChleGVjLCB2
bSwgdGhpcywgdXNlQ3VycmVudEZyYW1lLCBjYWxsRnJhbWUsIGhhc1NvdXJjZUFwcGVuZGVyKCkg
PyAmYnl0ZWNvZGVPZmZzZXQgOiBudWxscHRyKTsKIAogICAgIGlmIChoYXNUcmFjZSAmJiBjYWxs
RnJhbWUgJiYgaGFzU291cmNlQXBwZW5kZXIoKSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lICYm
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIAorICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5jYWxs
ZWUoKS5pc1dhc20oKSk7CiAgICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9yKGNhbGxGcmFt
ZSwgdGhpcywgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDIxNDgzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5NSwxNSArMjk1LDQgQEAgSlNWYWx1ZSBKU0NlbGw6OmdldFByb3RvdHlwZShKU09i
amVjdCosIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgSlND
ZWxsOjppc0FueVdhc21DYWxsZWUoVk0mIHZtKSBjb25zdAotewotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLSAgICByZXR1cm4gaW5oZXJpdHModm0sIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmluZm8o
KSkgfHwgaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUodGhpcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh2bSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cmlu
ZygpIGNvbnN0OwogICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdDsKICAgICBib29sIGlzT2JqZWN0
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FueVdhc21DYWxsZWUoVk0mKSBjb25zdDsKICAgICBib29s
IGlzR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc0N1c3RvbUdldHRlclNldHRlcigp
IGNvbnN0OwogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjE0ODMwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsMTEgKzEyNiwxMiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWluCiAKIEFMV0FZU19JTkxJTkUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAogewot
ICAgIEFTU0VSVChjYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhbGxlZSgpLT52bSgpKTsKLSAgICBB
U1NFUlQoIWNhbGxlZSgpLT5pc0xhcmdlQWxsb2NhdGlvbigpKTsKKyAgICBKU0NlbGwqIGNhbGxl
ZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOworICAgIEFTU0VSVChjYWxsZWUpOworICAgIEFT
U0VSVChjYWxsZWUtPnZtKCkpOworICAgIEFTU0VSVCghY2FsbGVlLT5pc0xhcmdlQWxsb2NhdGlv
bigpKTsKICAgICAvLyBUaGlzIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gc2luY2Ugd2Ug
YWNjZXNzIHRoaXMgc28gb2Z0ZW4uCi0gICAgcmV0dXJuICpjYWxsZWUoKS0+bWFya2VkQmxvY2so
KS52bSgpOworICAgIHJldHVybiAqY2FsbGVlLT5tYXJrZWRCbG9jaygpLnZtKCk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcs
NyArMjM3LDEwIEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9y
KCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBj
YWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCF2aXNpdG9yLT5jYWxsZWUo
KS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwor
CisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAg
ICAgICAgIGlmIChjYWxsZWUgIT0gbV90YXJnZXRDYWxsZWUpCiAgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKIApAQCAtMjc5LDcgKzI4MiwxMCBAQCBwdWJsaWM6CiAK
ICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRv
cikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVl
KCk7CisgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKworICAgICAgICBKU0NlbGwqIGNhbGxl
ZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwogCiAgICAgICAgIGlmIChjYWxsZWUgJiYg
Y2FsbGVlLT5pbmhlcml0cygqY2FsbGVlLT52bSgpLCBKU0JvdW5kRnVuY3Rpb246OmluZm8oKSkp
CiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyMTQ4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsOSArNDIsMTAgQEAgaW50cHRyX3QgU3RhY2tGcmFtZTo6c291cmNl
SUQoKSBjb25zdAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6c291cmNlVVJMKCkgY29uc3QKIHsKKyAg
ICBpZiAobV9pc1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW3dhc20g
Y29kZV0iKTsKKwogICAgIGlmICghbV9jb2RlQmxvY2spIHsKLSAgICAgICAgaWYgKG1fY2FsbGVl
ICYmIG1fY2FsbGVlLT5pc0FueVdhc21DYWxsZWUoKm1fY2FsbGVlLT52bSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CiAgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIltuYXRpdmUgY29kZV0iKTsKICAgICB9CiAKQEAgLTU2LDYgKzU3LDkgQEAg
U3RyaW5nIFN0YWNrRnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiAKIFN0cmluZyBTdGFja0ZyYW1l
OjpmdW5jdGlvbk5hbWUoVk0mIHZtKSBjb25zdAogeworICAgIGlmIChtX2lzV2FzbUZyYW1lKQor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCI8d2FzbT4iKTsKKwogICAgIGlmIChtX2NvZGVC
bG9jaykgewogICAgICAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgRXZhbENvZGU6CkBAIC03Miw3ICs3Niw3IEBAIFN0cmluZyBTdGFja0ZyYW1lOjpm
dW5jdGlvbk5hbWUoVk0mIHZtKSAKICAgICB9CiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKG1f
Y2FsbGVlKSB7Ci0gICAgICAgIGlmIChtX2NhbGxlZS0+aXNBbnlXYXNtQ2FsbGVlKCptX2NhbGxl
ZS0+dm0oKSkpCisgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShtX2NhbGxlZS5n
ZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCI8d2FzbT4iKTsKICAgICAg
ICAgaWYgKG1fY2FsbGVlLT5pc09iamVjdCgpKQogICAgICAgICAgICAgbmFtZSA9IGdldENhbGN1
bGF0ZWREaXNwbGF5TmFtZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4obV9jYWxsZWUuZ2V0KCkpKS5p
bXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5o
CShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFj
a0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgY2xhc3MgSlNPYmplY3Q7
CiAKIGNsYXNzIFN0YWNrRnJhbWUgewogcHVibGljOgorICAgIFN0YWNrRnJhbWUoKSA9IGRlZmF1
bHQ7CisKICAgICBTdGFja0ZyYW1lKFZNJiB2bSwgSlNDZWxsKiBjYWxsZWUpCiAgICAgICAgIDog
bV9jYWxsZWUodm0sIGNhbGxlZSkKICAgICB7IH0KQEAgLTQ1LDYgKzQ3LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsgfQogCisg
ICAgc3RhdGljIFN0YWNrRnJhbWUgd2FzbSgpCisgICAgeworICAgICAgICBTdGFja0ZyYW1lIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faXNXYXNtRnJhbWUgPSB0cnVlOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKwogICAgIGJvb2wgaGFzTGluZUFuZENvbHVtbkluZm8oKSBjb25z
dCB7IHJldHVybiAhIW1fY29kZUJsb2NrOyB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlTGluZUFu
ZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CkBAIC02NSw3
ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgU3Ryb25nPEpTQ2VsbD4gbV9jYWxsZWUgeyB9OwogICAg
IFN0cm9uZzxDb2RlQmxvY2s+IG1fY29kZUJsb2NrIHsgfTsKICAgICB1bnNpZ25lZCBtX2J5dGVj
b2RlT2Zmc2V0IHsgVUlOVF9NQVggfTsKLSAgICAKKyAgICBib29sIG1faXNXYXNtRnJhbWUgeyBm
YWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsOCBAQCBWTTo6
Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvZ3JhbUV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICB3ZWJBc3NlbWJseUNhbGxl
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlCisgICAgLy93ZWJB
c3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseVRvSlND
YWxsZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseVRvSlNDYWxsZWU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRpZgpAQCAtNjE2LDE0ICs2MTcsMTQgQEAgdm9p
ZCBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLAogCiAgICAgQVNTRVJUKGV4ZWMg
PT0gdG9wQ2FsbEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSk7CiAKLSAgICBpbnRlcnByZXRlci0+bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRv
QmVUaHJvd24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICBpbnRlcnByZXRlci0+bm90aWZ5RGVidWdn
ZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oKnRoaXMsIGV4ZWMsIGV4Y2VwdGlvbik7CiAKICAgICBz
ZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKIH0KIAogSlNWYWx1ZSBWTTo6dGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRocm93blZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gKnRoaXM7CiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KHZtLCB0aHJvd25WYWx1ZSk7CiAgICAgaWYgKCFl
eGNlcHRpb24pCiAgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKCp0aGlzLCB0
aHJvd25WYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyMiw3
ICs5MjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAg
ICAgIFZhbHVlKiBjb2RlQmxvY2sgPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLAogICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIG1faW5z
dGFuY2VWYWx1ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNvZGVCbG9jaygpKTsK
ICAgICAgICAgVmFsdWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzSlNCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdh
c21Ub0pTU3R1YihtX2luZm8uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCksIGZ1bmN0aW9uSW5kZXgp
KTsKKyAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ss
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGZ1bmN0
aW9uSW5kZXgpKTsKICAgICAgICAgVmFsdWUqIGpzQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzSlNCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRv
QjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bp
bm5lZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0
LmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMCBAQAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxMaW5rSW5mbzsKIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwotY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIGNsYXNzIEpTUHJvbWlzZURlZmVy
cmVkOwogCiBuYW1lc3BhY2UgV2FzbSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbklubGluZXMuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEz
ICszOSwxNyBAQCB2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9u
SW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlv
bkluZGV4KSB7CiAgICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7CiAKLSAgICAg
ICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJs
eUNhbGxlZTo6Y3JlYXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2lu
dCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpz
VG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBqc0VudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBh
dXRvIHdyYXBDYWxsZWUgPSBbXSAoV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkgLT4gdm9pZCog
eworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oY2FsbGVlKSB8IDEpOworICAgICAgICB9OwogCi0gICAgICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3Jl
YXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2Nh
dGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBSZWY8V2FzbTo6V2ViQXNzZW1i
bHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+anNUb1dhc21FbnRyeXBvaW50KSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3Zl
TG9jYXRpb24sIHdyYXBDYWxsZWUoanNFbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAKLSAgICAg
ICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdh
c21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVl
PiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShmdW5jdGlvbi0+d2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT53YXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCB3cmFw
Q2FsbGVlKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CisKKyAgICAgICAgY2FsbGJhY2so
aW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSksIFdURk1v
dmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNiArNzAsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQog
ICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93KTsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQg
KGJvdGggb3BfY2F0Y2ggYW5kIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQorICAgICAgICAvLyBy
ZXF1aXJlIGEgY2VsbCBpbiB0aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiBUaGUgYmFz
ZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgLy8gdGhpcyBzaW5jZSBpdCBpcyBj
b21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4KKyAgICAgICAgLy8gRklYTUU6IGlz
IHRoaXMgdG9vIG11Y2ggb2YgYSBoYWNrPworICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3Qq
PihleGVjKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3
YXNtQ29udGV4dC0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOwogICAgICAgICByZXR1cm4gdm0t
PnRhcmdldE1hY2hpbmVQQ0ZvclRocm93OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCShyZXZp
c2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzMiArMjgsMTYgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJXYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmgiCiAKLW5hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDYWxsZWU6
OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q2FsbGVlIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1dlYkFzc2VtYmx5Q2FsbGVlKSB9OwotCi1KU1dlYkFzc2VtYmx5Q2FsbGVlOjpK
U1dlYkFzc2VtYmx5Q2FsbGVlKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2VtYmx5
Q2FsbGVlU3RydWN0dXJlLmdldCgpKQoteyB9Ci0KLXZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKLXsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0KLSAgICBtX2VudHJ5cG9pbnQgPSBXVEZN
b3ZlKGVudHJ5cG9pbnQpOwotICAgIFdhc206OnJlZ2lzdGVyQ29kZShtX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwot
fQotCi12b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorV2Vi
QXNzZW1ibHlDYWxsZWU6OldlYkFzc2VtYmx5Q2FsbGVlKEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50
KQorICAgIDogbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCiB7Ci0gICAgSlNXZWJB
c3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxs
ZWUqPihjZWxsKTsKLSAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSh0aGlzT2JqZWN0LT5tX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCks
IHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkpOwotICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6
On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CisgICAgcmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7
CiB9CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJKHJldmlzaW9uIDIxNDgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw0NSArMjcsMzIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAotI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCi1uYW1lc3BhY2UgSlNDIHsKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxs
ZWUgOiBwdWJsaWMgSlNDZWxsIHsKK2NsYXNzIFdlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFdlYkFzc2VtYmx5Q2FsbGVlPiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y3JlYXRlKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgc3RhdGlj
IFJlZjxXZWJBc3NlbWJseUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50KQogICAgIHsKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNhbGxlZT4odm0uaGVhcCkpIEpTV2Vi
QXNzZW1ibHlDYWxsZWUodm0pOwotICAgICAgICBjYWxsZWUtPmZpbmlzaENyZWF0aW9uKHZtLCBX
VEZNb3ZlKGVudHJ5cG9pbnQpKTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICAgICAgV2Vi
QXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyBXZWJBc3NlbWJseUNhbGxlZShXVEZNb3ZlKGVu
dHJ5cG9pbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpjYWxsZWUpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgdm9pZCog
ZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7IH0KIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJz
OyB9CiAKIHByaXZhdGU6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNXZWJB
c3NlbWJseUNhbGxlZShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFdlYkFzc2VtYmx5Q2Fs
bGVlKFdhc206OkVudHJ5cG9pbnQmJik7CiAKICAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlw
b2ludDsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIEpTQworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpKU1dlYkFzc2VtYmx5Q29kCiAgICAgbV9tb2R1bGUuc2V0
KHZtLCB0aGlzLCBvd25lcik7CiAgICAgQVNTRVJUKCFtb2R1bGUoKS0+Y29kZUJsb2NrKG1vZGUp
KTsKICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2NrKHZtLCBtb2RlLCB0aGlzKTsKLQotICAgIG1l
bXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIpOworICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVD
b3VudCAqIDIpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUo
KQpAQCAtNTcsNyArNTYsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxp
emUoCiAgICAgICAgIHJldHVybjsKIAogICAgIFZNJiB2bSA9IHBsYW4oKS52bSgpOwotICAgIEFT
U0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHZtLCB2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghcGxhbigpLmhhc1dvcmsoKSk7CiAKICAgICBpZiAocGxhbigpLmZhaWxlZCgpKSB7
CkBAIC03NCwxMSArNzMsMTEgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0aWFs
aXplKAogCiAgICAgLy8gVGhlIGNvZGUgYSBtb2R1bGUgZW1pdHMgdG8gY2FsbCBpbnRvIEpTIHJl
bGllcyBvbiB1cyB0byBzZXQgdGhpcyB1cC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV93YXNtRXhpdFN0dWJzLnNpemUoKTsgaSsrKQotICAgICAgICBpbXBvcnRXYXNtVG9KU1N0dWIo
bV9jYWxsZWVDb3VudCwgaSkgPSBtX3dhc21FeGl0U3R1YnNbaV0ud2FzbVRvSnMuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGltcG9ydFdhc21Ub0pTU3R1YihpKSA9IG1fd2Fz
bUV4aXRTdHVic1tpXS53YXNtVG9Kcy5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAotICAg
IHBsYW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgIHNldEpTRW50cnlwb2ludENhbGxlZSh2
bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSk7Ci0gICAgICAgIHNldFdhc21FbnRy
eXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAg
IHBsYW4oKS5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWY8
V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+JiYganNFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6
V2ViQXNzZW1ibHlDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgc2V0
SlNFbnRyeXBvaW50Q2FsbGVlKGNhbGxlZUluZGV4LCBXVEZNb3ZlKGpzRW50cnlwb2ludENhbGxl
ZSkpOworICAgICAgICBzZXRXYXNtRW50cnlwb2ludENhbGxlZShjYWxsZWVJbmRleCwgV1RGTW92
ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0pOwogCiAgICAgbV9wbGFuID0gbnVsbHB0
cjsKQEAgLTExOCw4ICsxMTcsNiBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnZpc2l0
Q2hpbGRyCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9jYWxsZWVDb3VudCAqIDI7IGkrKykKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+Y2FsbGVlcygpW2ldKTsKIAogICAgIHZpc2l0
b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmdGhpc09iamVjdC0+bV91bmNvbmRpdGlvbmFs
RmluYWxpemVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1l
ci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpA
QCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNvZGVC
bG9jayogY3JlYXRlKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSogb3duZXIsIFdhc206Ok1l
bW9yeU1vZGUgbW9kZSwgUmVmPFdhc206OlBsYW4+JiYgcGxhbiwgdW5zaWduZWQgY2FsbGVlQ291
bnQsIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCiAgICAgewotICAgICAgICBhdXRvKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Pih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCwgZnVuY3Rpb25JbXBvcnRDb3Vu
dCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZtLCBvd25lciwgbW9kZSwgV1RGTW92ZShwbGFu
KSwgY2FsbGVlQ291bnQpOworICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6
ZShmdW5jdGlvbkltcG9ydENvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIG93bmVy
LCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBjYWxsZWVDb3VudCk7CiAgICAgICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTc1LDQ3
ICs3Niw0MyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSB7IEFTU0VSVCgh
cnVubmFibGUoKSk7IHJldHVybiBtX2Vycm9yTWVzc2FnZTsgfQogICAgIGJvb2wgaXNTYWZlVG9S
dW4oSlNXZWJBc3NlbWJseU1lbW9yeSopIGNvbnN0OwogCi0gICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCisgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0Vu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFj
ZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRl
eCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0
dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgICAgIHJldHVybiBtX2NhbGxl
ZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCisgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiB3YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNw
YWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUlu
ZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBy
ZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uZ2V0KCk7CisgICAg
ICAgIHJldHVybiBtX2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5nZXQoKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldEpTRW50cnlwb2ludENhbGxlZShWTSYgdm0sIHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCisgICAgdm9pZCBzZXRK
U0VudHJ5cG9pbnRDYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxXYXNtOjpXZWJB
c3NlbWJseUNhbGxlZT4gY2FsbGVlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4
XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CisgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0g
PSBjYWxsZWU7CiAgICAgfQogCi0gICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZShWTSYg
dm0sIHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpCisg
ICAgdm9pZCBzZXRXYXNtRW50cnlwb2ludENhbGxlZSh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVm
UHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBjYWxsZWUpCiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBjYWxsZWVz
KClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7Cisg
ICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdID0gY2FsbGVlOwog
ICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlcygp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4q
PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOyB9Ci0KICAg
ICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQog
ICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1wb3J0SW5kZXggPCBtX3dhc21FeGl0U3R1
YnMuc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIG1fd2FzbUV4aXRTdHVic1tpbXBvcnRJbmRleF0u
d2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBjYWxsZWVDb3Vu
dCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklt
cG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBvZmZzZXRPZkNhbGxlZXMoKQotICAgICAgICAgICAgKyAoc2l6ZW9mKFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiBjYWxsZWVDb3VudCAqIDIpCi0gICAgICAgICAgICAr
IChzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXgpOworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJ
bXBvcnRTdHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4OwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTEyNSwyMSArMTIyLDE5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FsbGVlcygpCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkltcG9ydFN0dWJzKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5Q2FsbGVlPik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7CisgICAg
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4oc2l6ZW9m
KEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spKTsKICAgICB9CiAKLSAgICBzdGF0aWMgc2l6ZV90IGFs
bG9jYXRpb25TaXplKHVuc2lnbmVkIGNhbGxlZUNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkltcG9y
dENvdW50KQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgZnVuY3Rp
b25JbXBvcnRDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRPZkNhbGxlZXMoKQot
ICAgICAgICAgICAgKyAoc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikg
KiBjYWxsZWVDb3VudCAqIDIpCi0gICAgICAgICAgICArIChzaXplb2Yodm9pZCopICogZnVuY3Rp
b25JbXBvcnRDb3VudCk7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBz
aXplb2Yodm9pZCopICogZnVuY3Rpb25JbXBvcnRDb3VudDsKICAgICB9CiAKLSAgICB2b2lkKiYg
aW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGNhbGxlZUNvdW50LCB1bnNpZ25lZCBpbXBvcnRJ
bmRleCkKKyAgICB2b2lkKiYgaW1wb3J0V2FzbVRvSlNTdHViKHVuc2lnbmVkIGltcG9ydEluZGV4
KQogICAgIHsKLSAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIoY2FsbGVlQ291bnQs
IGltcG9ydEluZGV4KSk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4oYml0
d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGltcG9y
dEluZGV4KSk7CiAgICAgfQogCiAgICAgY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplciA6IHB1
YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewpAQCAtMTUwLDYgKzE0NSw3IEBAIHBy
aXZhdGU6CiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6
ZXI7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxX
YXNtOjpXYXNtRXhpdFN0dWJzPiBtX3dhc21FeGl0U3R1YnM7CisgICAgVmVjdG9yPFJlZlB0cjxX
YXNtOjpXZWJBc3NlbWJseUNhbGxlZT4+IG1fY2FsbGVlczsKICAgICAvLyBUaGUgcGxhbiB0aGF0
IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCiAgICAgUmVmUHRyPFdhc206OlBsYW4+IG1f
cGxhbjsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNp
b24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBv
cnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJh
cnJpZXI8SlNDZWxsPikpOyB9CiAKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2Vt
Ymx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdldCgpOyB9CisKIHByb3RlY3RlZDoK
ICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3I6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvcikgfTsKKwogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8qIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcj4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iodm0sIHN0cnVjdHVyZSk7CkBAIC00Niw5
ICs0OCw2IEBAIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OkpTV2ViQXNzZW1ibHkKIHsKIH0K
IAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OnNfaW5mbyA9IHsg
IldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcikgfTsKLQotICAgIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBOb3RlOiB3
ZSBzcGVjaWZpY2FsbHkgdXNlIHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUg
dG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBm
b3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93
LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93Ci0gICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBn
bG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9l
c24ndCBoYXZlIGEKKyAgICAvLyBoYW5kbGVyIG1pZ2h0IHJlYWQgdGhlIGdsb2JhbCBvYmplY3Qg
ZnJvbSB0aGUgY2FsbGVlLiBUaGUgV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKICAg
ICAvLyBnbG9iYWwgb2JqZWN0LCBidXQgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24gZG9lcy4KICAg
ICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBwcm90b0NhbGxGcmFtZS5pbml0
KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmlu
Z0FyZ3MpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsKIH0KIAotV2ViQXNzZW1i
bHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpz
RW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdh
c206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMs
IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVj
dHVyZSgpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlU3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1
bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2Vt
Ymx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKICAgICA6IEJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKQogICAgICwgbV93YXNtRW50cnlQb2ludENvZGUod2FzbUVudHJ5
cG9pbnQtPmVudHJ5cG9pbnQoKSkKICAgICAsIG1fc2lnbmF0dXJlSW5kZXgoc2lnbmF0dXJlSW5k
ZXgpCkBAIC0xODYsMTggKzE4NiwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0gICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9qc0VudHJ5cG9pbnQpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fd2FzbUVudHJ5cG9pbnQpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQg
bGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdhc206OldlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGlu
Zm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7CiAgICAgQVNT
RVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7Ci0gICAgbV9qc0VudHJ5cG9pbnQu
c2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOwotICAgIG1fd2FzbUVudHJ5cG9pbnQuc2V0KHZt
LCB0aGlzLCB3YXNtRW50cnlwb2ludCk7CisgICAgbV9qc0VudHJ5cG9pbnQgPSBqc0VudHJ5cG9p
bnQ7CisgICAgbV93YXNtRW50cnlwb2ludCA9IHdhc21FbnRyeXBvaW50OwogICAgIEFTU0VSVCht
X3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkgPT0gbV93YXNtRW50cnlQb2ludENvZGUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSos
IFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIFdhc206OldlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQpAQCAtNjMsMTUgKzYzLDE3IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBXYXNt
OjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpOwogCiBwcml2YXRlOgotICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6V2ViQXNzZW1i
bHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwogICAgIHZvaWQqIG1fd2FzbUVudHJ5UG9p
bnRDb2RlOyAvLyBDYWNoZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0aGUgd2FzbSAtPiB3YXNtIHN0
dWIgdG8gZG8gYSBzaW5nbGUgbG9hZCBhbmQganVtcCBpbnN0ZWFkIG9mIGhhdmluZyBkZXBlbmRl
bnQgbG9hZHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRy
eXBvaW50OwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRy
eXBvaW50OworICAgIC8vIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0byB0aGVzZSwgc2luY2Ug
d2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBvdXIKKyAgICAvLyBpbnN0YW5jZSwgd2hpY2gga2VlcHMg
YWxpdmUgdGhlIENvZGVCbG9jaywgd2hpY2ggb3ducyB0aGlzIHBvaW50ZXIuCisgICAgV2FzbTo6
V2ViQXNzZW1ibHlDYWxsZWUqIG1fanNFbnRyeXBvaW50OworICAgIFdhc206OldlYkFzc2VtYmx5
Q2FsbGVlKiBtX3dhc21FbnRyeXBvaW50OwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQg
dGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAv
LyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0
ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRv
ZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24g
MjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTEgKzEyNSwxMSBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAgICAgLy8gICAg
IGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRl
ZCBmcm9tIGMuCiAgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNz
LgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVuYy4KLSAgICAgICAgICAgICAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShl
eHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlD
YWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29k
ZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtp
bmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAu
a2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5
cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNl
LCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBz
aWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9u
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTYsOSArMTk2LDkgQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgSlNP
YmplY3QqIHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhp
cywgc3RhcnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwot
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBj
b2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFy
dEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBj
b2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRG
dW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5
Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAg
ICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCks
ICJzdGFydCIsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0KCksIHdhc21FbnRyeXBv
aW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzAs
MTUgKzI3MCwxNSBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVC
bG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4KTsKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpXZWJB
c3NlbWJseUNhbGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAg
ICAgICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0
aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBp
ZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgogICAg
ICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0g
dGFibGUuZ2V0KDApPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNFbnRyeXBvaW50Q2FsbGVl
LCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBqc0VudHJ5cG9pbnRDYWxsZWUuZ2V0
KCksIHdhc21FbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CiAKICAgICAg
ICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsIGZ1bmN0aW9uKTsK
ICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNCwxMiArMzA0LDEyIEBAIERPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2Rl
QmxvY2soKSkKICAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
dmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxs
ZWUoKS5yYXdQdHIoKSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3Qg
YW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgogICAgICAgICAgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBn
bG9iYWwgb2JqZWN0CiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJ
bnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQot
ICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9y
LT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICh2aXNpdG9y
LT5jYWxsZWUoKS5pc0NlbGwoKSAmJiB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKS0+aXNPYmpl
Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPih2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSktPmdsb2JhbE9iamVjdCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKICAgICAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306157</attachid>
            <date>2017-04-03 19:26:42 -0700</date>
            <delta_ts>2017-04-03 22:07:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>84828</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMTUwMiw3ICsxNTAy
LDcgQEAKICAgICAgICAgKiB3YXNtL1dhc21Xb3JrbGlzdC5oOiBBZGRlZC4KICAgICAgICAgKEpT
Qzo6V2FzbTo6V29ya2xpc3Q6Om5leHRUaWNrZXQpOgogICAgICAgICAoSlNDOjpXYXNtOjpXb3Jr
bGlzdDo6Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Ci0gICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q2FsbGVlLmg6CisgICAgICAgIGUgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg6
CiAgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDoKICAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVCbG9jayk6CiAg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUpOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMg
SlNWYWx1ZSBib3goRXhlY1N0YXRlKiBleGVjLCBWTSYgCiB9CiAKIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTgyLgotc3RhdGljIEpTVmFsdWUg
Y2FsbFdhc21GdW5jdGlvbihWTSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykK
K3N0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSwgY29uc3Qg
QXJnTGlzdCYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudDsKICAgICBp
bnQgYXJnQ291bnQgPSAxOwpAQCAtMzIwMiwxNSArMzIwMiwxNSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgaWYgKHBsYW4tPmludGVybmFsRnVuY3Rpb25D
b3VudCgpICE9IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBjYWxsZWVzOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtlZXBBbGl2
ZTsKKyAgICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4gY2FsbGVlczsKKyAg
ICBWZWN0b3I8UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPj4ga2VlcEFsaXZlOwogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7CiAgICAgICAgIHBsYW4tPmlu
aXRpYWxpemVDYWxsZWVzKAotICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwg
SlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIGpzRW50cnlwb2ludENh
bGxlZSwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVl
KSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxs
ZWVJbmRleCAtIDEgPT0gbGFzdEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBl
bmQoanNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgICAgICBrZWVwQWxpdmUuYXBwZW5k
KHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChX
VEZNb3ZlKGpzRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgIGtlZXBBbGl2ZS5h
cHBlbmQoV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIGxh
c3RJbmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzIzOCw3
ICszMjM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAg
ICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0OwogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgICAg
ICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94
ZWRBcmdzKTsKKyAgICAgICAgICAgICAgICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigm
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbGVlc1tpXS5wdHIoKSwgYm94ZWRB
cmdzKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2
bSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJl
Zi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7CiAgICAg
ICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBhZGRlZCBhbnkg
ZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0aGUgZnJhbWUs
IGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1lbnRzLgotICAg
ICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAgICAgICAgICAg
IGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYgdmlzaXRvci0+
aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVpbGRlciA9IG1f
YnVpbGRlcjsKICAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBAIC0yODEsNyAr
MjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxp
bmVOdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNhbGxlZSkKKyAg
ICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9yZW1haW5pbmdD
YXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk3LDYg
KzE0OTcsNyBAQAogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVE
Nzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3
OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0Yw
MDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC00MDQ0LDYgKzQwNDUsNyBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAz
MDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
ZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE0MUU1RDc5
OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY1QzIxNTFF
NUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTZEQUEyQTFFODlDQ0Q2
MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxsZWVCaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NzM4LDYgKzU3NDAsNyBAQAogCQkJCTBGNTVGMEYxMTREMTA2MzYw
MEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2
NDkgLyogQWJzdHJhY3RQQy5oICovLAogCQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBD
YWNoZWRDYWxsLmggKi8sCisJCQkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJp
dHMuaCAqLywKIAkJCQkxNDI5RDhEQjBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCAq
LywKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJ
QTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAqLywKQEAgLTg4
NjIsNiArODg2NSw3IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJ
Q0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUg
LyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFC
RkJFNTYxMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
OTZEQUEyQjFFODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3
LDcgKzY4Nyw3IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUludGVybmFsKEMKIAog
dm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0mIHZtID0gbV92bTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAobV9pc1BhdXNlZCkK
QEAgLTcwNiwxMSArNzA2LDExIEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICBwYXVzZU5vdyB8PSAobV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENh
bGxGcmFtZSk7CiAKICAgICBib29sIGRpZFBhdXNlRm9yU3RlcCA9IHBhdXNlTm93OwotICAgIGJv
b2wgZGlkSGl0QnJlYWtwb2ludCA9IGZhbHNlOwogCiAgICAgQnJlYWtwb2ludCBicmVha3BvaW50
OwotICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlv
bkZvckNhbGxGcmFtZShtX2N1cnJlbnRDYWxsRnJhbWUpOwotICAgIHBhdXNlTm93IHw9IGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3Np
dGlvbkZvckNhbGxGcmFtZSh2bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKKyAgICBib29sIGRpZEhp
dEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9p
bnQpOworICAgIHBhdXNlTm93IHw9IGRpZEhpdEJyZWFrcG9pbnQ7CiAgICAgbV9sYXN0RXhlY3V0
ZWRMaW5lID0gcG9zaXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOwogICAgIGlmICghcGF1c2VO
b3cpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpw
YXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAgICAgLy8gcmVzZXRpbmcgdGhlIHBhdXNlIHN0YXRl
IGJlZm9yZSBleGVjdXRpbmcgYW55IGJyZWFrcG9pbnQgYWN0aW9ucy4KICAgICBUZW1wb3JhcnlQ
YXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgqdGhpcyk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogdm1F
bnRyeUdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT52bUVudHJ5
R2xvYmFsT2JqZWN0KHZtKTsKIAogICAgIGlmIChkaWRIaXRCcmVha3BvaW50KSB7CiAgICAgICAg
IGhhbmRsZUJyZWFrcG9pbnRIaXQodm1FbnRyeUdsb2JhbE9iamVjdCwgYnJlYWtwb2ludCk7CkBA
IC05MTYsNyArOTE2LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxG
cgogRGVidWdnZXJDYWxsRnJhbWUmIERlYnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUo
KQogewogICAgIGlmICghbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUpCi0gICAgICAgIG1fY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lID0gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShtX2N1cnJl
bnRDYWxsRnJhbWUpOworICAgICAgICBtX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVn
Z2VyQ2FsbEZyYW1lOjpjcmVhdGUobV92bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICByZXR1
cm4gKm1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE2ICs2MCwxNiBAQCBwcml2YXRlOgog
ICAgIG11dGFibGUgdW5zaWduZWQgbV9jb2x1bW47CiB9OwogCi1SZWY8RGVidWdnZXJDYWxsRnJh
bWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitSZWY8
RGVidWdnZXJDYWxsRnJhbWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lID09IGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpKSB7CisgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPndhc21Bd2FyZUxleGljYWxHbG9iYWxPYmpl
Y3Qodm0pLT5nbG9iYWxFeGVjKCkpKSB7CiAgICAgICAgIFNoYWRvd0NoaWNrZW46OkZyYW1lIGVt
cHR5RnJhbWU7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbXB0eUZyYW1lLmlzVGFpbERlbGV0
ZWQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWJ1Z2dlckNhbGxGcmFtZShjYWxs
RnJhbWUsIGVtcHR5RnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVidWdn
ZXJDYWxsRnJhbWUodm0sIGNhbGxGcmFtZSwgZW1wdHlGcmFtZSkpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxTaGFkb3dDaGlja2VuOjpGcmFtZT4gZnJhbWVzOwotICAgIGNhbGxGcmFtZS0+dm0oKS5z
aGFkb3dDaGlja2VuKCkuaXRlcmF0ZShjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgWyZdIChj
b25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpIC0+IGJvb2wgeworICAgIHZtLnNoYWRv
d0NoaWNrZW4oKS5pdGVyYXRlKHZtLCBjYWxsRnJhbWUsIFsmXSAoY29uc3QgU2hhZG93Q2hpY2tl
bjo6RnJhbWUmIGZyYW1lKSAtPiBib29sIHsKICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwpAQCAtNzgsMjQgKzc4LDI0IEBAIFJlZjxE
ZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJhbWUKICAgICBBU1NFUlQoIWZyYW1lc1sw
XS5pc1RhaWxEZWxldGVkKTsgLy8gVGhlIHRvcCBmcmFtZSBzaG91bGQgbmV2ZXIgYmUgdGFpbCBk
ZWxldGVkLgogCiAgICAgUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50UGFyZW50ID0g
bnVsbHB0cjsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNhbGxGcmFtZS0+
d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCh2bSktPmdsb2JhbEV4ZWMoKTsKICAgICAvLyBU
aGlzIHdhbGtzIHRoZSBzdGFjayBmcm9tIHRoZSBlbnRyeSBzdGFjayBmcmFtZSB0byB0aGUgdG9w
IG9mIHRoZSBzdGFjay4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcmFtZXMuc2l6ZSgpOyBpLS07
ICkgewogICAgICAgICBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUgPSBmcmFtZXNb
aV07CiAgICAgICAgIGlmICghZnJhbWUuaXNUYWlsRGVsZXRlZCkKICAgICAgICAgICAgIGV4ZWMg
PSBmcmFtZS5mcmFtZTsKLSAgICAgICAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50RnJh
bWUgPSBhZG9wdFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKGV4ZWMsIGZyYW1lKSk7CisgICAg
ICAgIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3VycmVudEZyYW1lID0gYWRvcHRSZWYoKm5ldyBE
ZWJ1Z2dlckNhbGxGcmFtZSh2bSwgZXhlYywgZnJhbWUpKTsKICAgICAgICAgY3VycmVudEZyYW1l
LT5tX2NhbGxlciA9IGN1cnJlbnRQYXJlbnQ7CiAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBXVEZN
b3ZlKGN1cnJlbnRGcmFtZSk7CiAgICAgfQogICAgIHJldHVybiAqY3VycmVudFBhcmVudDsKIH0K
IAotRGVidWdnZXJDYWxsRnJhbWU6OkRlYnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpCitEZWJ1Z2dlckNhbGxGcmFt
ZTo6RGVidWdnZXJDYWxsRnJhbWUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
U2hhZG93Q2hpY2tlbjo6RnJhbWUmIGZyYW1lKQogICAgIDogbV92YWxpZE1hY2hpbmVGcmFtZShj
YWxsRnJhbWUpCiAgICAgLCBtX3NoYWRvd0NoaWNrZW5GcmFtZShmcmFtZSkKIHsKLSAgICBtX3Bv
c2l0aW9uID0gY3VycmVudFBvc2l0aW9uKCk7CisgICAgbV9wb3NpdGlvbiA9IGN1cnJlbnRQb3Np
dGlvbih2bSk7CiB9CiAKIFJlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJh
bWU6OmNhbGxlckZyYW1lKCkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIERlYnVnZ2VyQ2FsbEZy
YW1lOjppbnZhbGlkYXRlKCkKICAgICB9CiB9CiAKLVRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxG
cmFtZTo6Y3VycmVudFBvc2l0aW9uKCkKK1RleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6
Y3VycmVudFBvc2l0aW9uKFZNJiB2bSkKIHsKICAgICBpZiAoIW1fdmFsaWRNYWNoaW5lRnJhbWUp
CiAgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24oKTsKQEAgLTI5NywxMyArMjk3LDEzIEBAIFRl
eHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFAKICAgICAgICAgfQogICAgIH0K
IAotICAgIHJldHVybiBwb3NpdGlvbkZvckNhbGxGcmFtZShtX3ZhbGlkTWFjaGluZUZyYW1lKTsK
KyAgICByZXR1cm4gcG9zaXRpb25Gb3JDYWxsRnJhbWUodm0sIG1fdmFsaWRNYWNoaW5lRnJhbWUp
OwogfQogCi1UZXh0UG9zaXRpb24gRGVidWdnZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQorVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1l
Ojpwb3NpdGlvbkZvckNhbGxGcmFtZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewog
ICAgIExpbmVBbmRDb2x1bW5GdW5jdG9yIGZ1bmN0b3I7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRl
KGZ1bmN0b3IpOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0
b3IpOwogICAgIHJldHVybiBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KGZ1bmN0b3IubGluZSgpKSwgT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGZ1bmN0
b3IuY29sdW1uKCkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lIDogcHVibGljIFJl
ZkNvdW4KIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBl
IH07CiAKLSAgICBzdGF0aWMgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjcmVhdGUoQ2FsbEZyYW1l
Kik7CisgICAgc3RhdGljIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3JlYXRlKFZNJiwgQ2FsbEZy
YW1lKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+
IGNhbGxlckZyYW1lKCk7CiAgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7CkBAIC02OSwxNCAr
NjksMTQgQEAgcHVibGljOgogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgcHVibGljIGZv
ciB0aGUgRGVidWdnZXIncyB1c2Ugb25seS4gVGhleSB3aWxsIGJlCiAgICAgLy8gbWFkZSBwcml2
YXRlIHNvb24uIE90aGVyIGNsaWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlc2UuCiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0aW9uKCk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3NpdGlvbkZvckNhbGxGcmFtZShDYWxs
RnJhbWUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0
aW9uKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3Np
dGlvbkZvckNhbGxGcmFtZShWTSYsIENhbGxGcmFtZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTb3VyY2VJRCBzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAogICAg
IGJvb2wgaXNUYWlsRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Q2hpY2tlbkZyYW1l
LmlzVGFpbERlbGV0ZWQ7IH0KIAogcHJpdmF0ZToKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxs
RnJhbWUqLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYpOworICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKFZNJiwgQ2FsbEZyYW1lKiwgY29uc3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmKTsKIAogICAg
IENhbGxGcmFtZSogbV92YWxpZE1hY2hpbmVGcmFtZTsKICAgICBSZWZQdHI8RGVidWdnZXJDYWxs
RnJhbWU+IG1fY2FsbGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNjb3BlLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0xODUsNyArMTg2LDggQEAgUmVnaXN0ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFs
KAogCiBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0KCkKIHsK
LSAgICBpZiAoY2FsbGVlKCktPmlzT2JqZWN0KCkpIHsgCisgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bGVlKCkuaXNDZWxsKCkpOworICAgIGlmIChjYWxsZWUoKS5hc0NlbGwoKS0+aXNPYmplY3QoKSkg
eyAKICAgICAgICAgaWYgKHRoaXMgPT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpCiAgICAgICAgICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIH0KQEAg
LTE5Nyw2ICsxOTksMzkgQEAgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6dm1FbnRyeUdsb2Jh
bAogICAgIHJldHVybiB2bSgpLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpOwogfQogCitKU0ds
b2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0KFZNJiB2bSkKK3sKKyAg
ICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkgJiYgY2FsbGVlKCkuYXNDZWxsKCktPmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gbGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpCisgICAgICAgICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIH0KKwor
ICAgIC8vIEZvciBhbnkgRXhlY1N0YXRlIHRoYXQncyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCisg
ICAgLy8gZHluYW1pYyBnbG9iYWwgb2JqZWN0IG11c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVu
bmluZworICAgIEFTU0VSVCh2bS5lbnRyeVNjb3BlKTsKKyAgICByZXR1cm4gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCk7Cit9CisKK0pTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6Ondhc21B
d2FyZUxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKQoreworICAgIGlmICghY2FsbGVlKCkuaXNX
YXNtKCkpCisgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJu
IFdhc206OmxvYWRDb250ZXh0KHZtKS0+Z2xvYmFsT2JqZWN0KCk7Cit9CisKK2Jvb2wgQ2FsbEZy
YW1lOjppc0FueVdhc21DYWxsZWUoKQoreworICAgIENhbGxlZUJpdHMgY2FsbGVlID0gdGhpcy0+
Y2FsbGVlKCk7CisgICAgaWYgKGNhbGxlZS5pc1dhc20oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBBU1NFUlQoY2FsbGVlLmlzQ2VsbCgpKTsKKyAgICBpZiAoISFjYWxsZWUucmF3UHRy
KCkgJiYgaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVlLmFzQ2VsbCgpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIENhbGxGcmFtZSogQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZShWTUVudHJ5RnJhbWUqJiBjdXJyVk1FbnRyeUZyYW1lKQogewogICAg
IGlmIChjYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0gY3VyclZNRW50cnlGcmFtZSkgewpA
QCAtMjE5LDkgKzI1NCwxMSBAQCBTVVBQUkVTU19BU0FOIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp1
bnNhCiAKIFNvdXJjZU9yaWdpbiBDYWxsRnJhbWU6OmNhbGxlclNvdXJjZU9yaWdpbigpCiB7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKCkuaXNDZWxsKCkpOworICAgIFZNKiB2bSA9ICZ0aGlz
LT52bSgpOwogICAgIFNvdXJjZU9yaWdpbiBzb3VyY2VPcmlnaW47CiAgICAgYm9vbCBoYXZlU2tp
cHBlZEZpcnN0RnJhbWUgPSBmYWxzZTsKLSAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHRoaXMsIFsm
XShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KHRoaXMs
IHZtLCBbJl0oU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSB7CiAgICAgICAgIGlmICghc3RkOjpleGNo
YW5nZShoYXZlU2tpcHBlZEZpcnN0RnJhbWUsIHRydWUpKQogICAgICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6U3RhdHVzOjpDb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFic3RyYWN0UEMu
aCIKKyNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIK
QEAgLTg2LDEwICs4NywxOCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgcHVibGljOgogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQgKyAxOwogCi0gICAgICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7IH0KLSAg
ICAgICAgSlNPYmplY3QqIGpzQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVT
bG90OjpjYWxsZWVdLm9iamVjdCgpOyB9Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVlKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnVuYm94ZWRDZWxsKCk7IH0KLSAg
ICAgICAgU1VQUFJFU1NfQVNBTiBKU1ZhbHVlIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJu
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlSlNWYWx1ZSgpOyB9CisgICAg
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVCghY2FsbGVlKCkuaXNXYXNtKCkpOworICAgICAgICAgICAgcmV0dXJuIHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgSlNPYmpl
Y3QqIGpzQ2FsbGVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFjYWxs
ZWUoKS5pc1dhc20oKSk7CisgICAgICAgICAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpj
YWxsZWVdLm9iamVjdCgpOworICAgICAgICB9CisgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ucG9p
bnRlcigpKTsgfQorICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVl
KCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0u
cG9pbnRlcigpKTsgfQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7
IH0KICAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsgfQogICAgICAgICBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogdW5zYWZlQ29kZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVy
Ojphc2FuVW5zYWZlQ29kZUJsb2NrKCk7IH0KQEAgLTk4LDkgKzEwNywxNSBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgICAgICBBU1NFUlQodGhpc1tzY29wZVJlZ2lzdGVyT2Zmc2V0XS5SZWdp
c3Rlcjo6c2NvcGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdGhpc1tzY29wZVJlZ2lzdGVyT2Zm
c2V0XS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICAgICAgfQotCiAgICAgICAgIC8vIEdsb2JhbCBv
YmplY3QgaW4gd2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgorICAgICAgICAvLyBUaGlzIHZhcmlhbnQg
aXMgbm90IHNhZmUgdG8gY2FsbCBmcm9tIGEgV2FzbSBmcmFtZS4KICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
Ly8gVGhpcyB2YXJpYW50IGlzIHNhZmUgdG8gY2FsbCBmcm9tIGEgV2FzbSBmcmFtZS4KKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoVk0mKTsKKworICAgICAgICBK
U0dsb2JhbE9iamVjdCogd2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdChWTSYpOworCisgICAg
ICAgIGJvb2wgaXNBbnlXYXNtQ2FsbGVlKCk7CiAKICAgICAgICAgLy8gR2xvYmFsIG9iamVjdCBp
biB3aGljaCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb2RlIHdhcyBkZWZpbmVkLgogICAgICAg
ICAvLyBEaWZmZXJzIGZyb20gdm1FbnRyeUdsb2JhbE9iamVjdCgpIGR1cmluZyBmdW5jdGlvbiBj
YWxscyBhY3Jvc3Mgd2ViIGJyb3dzZXIgZnJhbWVzLgpAQCAtMjU3LDkgKzI3MiwxNyBAQCBuYW1l
c3BhY2UgSlNDICB7CiAgICAgICAgIC8vICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRv
cigpKFN0YWNrVmlzaXRvciYpIGNvbnN0OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qg
aXMgaW1wcm9wZXIuIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aXRo
IGEgbnVsbAogICAgICAgICAvLyByZWNlaXZlci4gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBT
dGFja1Zpc2l0b3IgZGlyZWN0bHkuCisgICAgICAgIC8vIEl0J3Mgb25seSB2YWxpZCB0byBjYWxs
IHRoaXMgZnJvbSBhIG5vbi13YXNtIHRvcCBmcmFtZS4KICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0PEZ1bmN0b3I+KHRoaXMsIGZ1bmN0
b3IpOworICAgICAgICAgICAgVk0qIHZtOworICAgICAgICAgICAgdm9pZCogcmF3VGhpcyA9IHRo
aXM7CisgICAgICAgICAgICBpZiAoISFyYXdUaGlzKSB7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2FsbGVlKCkuaXNDZWxsKCkpOworICAgICAgICAgICAgICAgIHZtID0gJnRoaXMt
PnZtKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB2bSA9IG51bGxwdHI7
CisgICAgICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0PEZ1bmN0b3I+KHRoaXMsIHZtLCBmdW5j
dG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJpdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVC
aXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20gewor
Y2xhc3MgV2ViQXNzZW1ibHlDYWxsZWU7Cit9CisKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3MgQ2Fs
bGVlQml0cyB7CitwdWJsaWM6CisgICAgQ2FsbGVlQml0cygpID0gZGVmYXVsdDsKKyAgICBDYWxs
ZWVCaXRzKHZvaWQqIHB0cikgOiBtX3B0cihwdHIpIHsgfSAKKworICAgIENhbGxlZUJpdHMmIG9w
ZXJhdG9yPShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBtX3B0ciA9IGNlbGw7CisgICAg
ICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBib29sIGlzV2FzbSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1f
cHRyKSAmIDE7IH0KKyAgICBib29sIGlzQ2VsbCgpIGNvbnN0IHsgcmV0dXJuICFpc1dhc20oKTsg
fQorCisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIGFzQ2VsbCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIWlzV2FzbSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KG1fcHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIFdhc206OldlYkFzc2VtYmx5
Q2FsbGVlKiBhc1dhc21DYWxsZWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzV2Fz
bSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXYXNtOjpXZWJBc3NlbWJseUNhbGxl
ZSo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIH4xKTsKKyAgICB9CisKKyAgICB2
b2lkKiByYXdQdHIoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkKiBtX3B0ciB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9yZW1haW5pbmdDYXBhY2l0eUZvckZy
YW1lQ2FwdHVyZSkgewotICAgICAgICAgICAgaWYgKCF2aXNpdG9yLT5pc1dhc21GcmFtZSgpCi0g
ICAgICAgICAgICAgICAgJiYgISF2aXNpdG9yLT5jb2RlQmxvY2soKQotICAgICAgICAgICAgICAg
ICYmICF2aXNpdG9yLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGlu
RnVuY3Rpb24oKSkgeworICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzV2FzbUZyYW1lKCkpCisg
ICAgICAgICAgICAgICAgbV9yZXN1bHRzLmFwcGVuZChTdGFja0ZyYW1lOjp3YXNtKCkpOworICAg
ICAgICAgICAgZWxzZSBpZiAoISF2aXNpdG9yLT5jb2RlQmxvY2soKSAmJiAhdmlzaXRvci0+Y29k
ZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAg
ICAgICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTdGFj
a0ZyYW1lKG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwgdmlz
aXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBTdGFja0ZyYW1l
KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpLCB2aXNpdG9yLT5jb2RlQmxvY2soKSwg
dmlzaXRvci0+Ynl0ZWNvZGVPZmZzZXQoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBtX3Jlc3VsdHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTdGFja0Zy
YW1lKG1fdm0sICB2aXNpdG9yLT5jYWxsZWUoKSkpOworICAgICAgICAgICAgICAgICAgICBTdGFj
a0ZyYW1lKG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICB9
CiAgICAgCiAgICAgICAgICAgICBtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlLS07
CkBAIC01MDMsNyArNTAzLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0
b3I8UwogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QgZnJhbWVzQ291bnQgPSAwOwotICAg
IGNhbGxGcmFtZS0+aXRlcmF0ZShbJl0gKFN0YWNrVmlzaXRvciYpIC0+IFN0YWNrVmlzaXRvcjo6
U3RhdHVzIHsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBbJl0gKFN0
YWNrVmlzaXRvciYpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKICAgICAgICAgZnJhbWVzQ291
bnQrKzsKICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfSk7CkBA
IC01MTQsNyArNTE0LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZShWZWN0b3I8
UwogICAgIGZyYW1lc0NvdW50ID0gc3RkOjptaW4obWF4U3RhY2tTaXplLCBmcmFtZXNDb3VudCk7
CiAKICAgICBHZXRTdGFja1RyYWNlRnVuY3RvciBmdW5jdG9yKHZtLCByZXN1bHRzLCBmcmFtZXNU
b1NraXAsIGZyYW1lc0NvdW50KTsKLSAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Cisg
ICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgQVNT
RVJUKHJlc3VsdHMuc2l6ZSgpID09IHJlc3VsdHMuY2FwYWNpdHkoKSk7CiB9CiAKQEAgLTU3NSwx
MyArNTc1LDEzIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBIYW5kbGVySW5mbyogbV9oYW5kbGVy
OwogfTsKIAotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5k
aW5nKENhbGxGcmFtZSogY2FsbEZyYW1lKQorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3Rp
ZnlEZWJ1Z2dlck9mVW53aW5kaW5nKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJh
bWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgeworICAgIGlmIChEZWJ1Z2dl
ciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3Qodm0pLT5kZWJ1Z2dl
cigpKSB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29wZSgmdm0pOwotICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIGNhbGxGcmFtZS0+anNDYWxsZWUo
KSkpCisgICAgICAgIGlmIChjYWxsRnJhbWUtPmlzQW55V2FzbUNhbGxlZSgpCisgICAgICAgICAg
ICB8fCAoY2FsbEZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSAmJiBjYWxsRnJhbWUtPmNhbGxlZSgp
LmFzQ2VsbCgpLT5pbmhlcml0cyh2bSwgSlNGdW5jdGlvbjo6aW5mbygpKSkpCiAgICAgICAgICAg
ICBkZWJ1Z2dlci0+dW53aW5kRXZlbnQoY2FsbEZyYW1lKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7CkBAIC01OTEsOCAr
NTkxLDkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlcgogCiBjbGFz
cyBVbndpbmRGdW5jdG9yIHsKIHB1YmxpYzoKLSAgICBVbndpbmRGdW5jdG9yKENhbGxGcmFtZSom
IGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhh
bmRsZXJJbmZvKiYgaGFuZGxlcikKLSAgICAgICAgOiBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCisg
ICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rl
cm1pbmF0aW9uLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIEhhbmRsZXJJbmZvKiYgaGFuZGxlcikK
KyAgICAgICAgOiBtX3ZtKHZtKQorICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAg
ICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCkBAIC02MTQsNyAr
NjE1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbm90
aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX2NhbGxGcmFtZSk7CisgICAgICAgIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CiAKQEAgLTYzNCwx
MyArNjM1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghY3VycmVudENhbGxlZVNhdmVzKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgp
OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0
QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgICAgICBSZWdpc3RlclNldCBkb250
Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwogICAgICAgICBp
bnRwdHJfdCogZnJhbWUgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Kj4obV9jYWxsRnJhbWUt
PnJlZ2lzdGVycygpKTsKIAogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY3VycmVu
dENhbGxlZVNhdmVzLT5zaXplKCk7Ci0gICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9IHZt
RW50cnlSZWNvcmQodm0udG9wVk1FbnRyeUZyYW1lKTsKKyAgICAgICAgVk1FbnRyeVJlY29yZCog
cmVjb3JkID0gdm1FbnRyeVJlY29yZChtX3ZtLnRvcFZNRW50cnlGcmFtZSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgY3VycmVudEVudHJ5ID0gY3VycmVudENhbGxlZVNhdmVzLT5hdChp
KTsKICAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoY3VycmVudEVudHJ5LnJl
ZygpKSkKQEAgLTY1NCw2ICs2NTQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgfQogCisgICAg
Vk0mIG1fdm07CiAgICAgQ2FsbEZyYW1lKiYgbV9jYWxsRnJhbWU7CiAgICAgYm9vbCBtX2lzVGVy
bWluYXRpb247CiAgICAgQ29kZUJsb2NrKiYgbV9jb2RlQmxvY2s7CkBAIC02ODYsMTggKzY4Nywx
NyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAKICAgICAvLyBD
YWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMg
YXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gbnVsbHB0cjsKLSAgICBV
bndpbmRGdW5jdG9yIGZ1bmN0b3IoY2FsbEZyYW1lLCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24odm0sIGV4Y2VwdGlvbiksIGNvZGVCbG9jaywgaGFuZGxlcik7Ci0gICAgY2FsbEZyYW1l
LT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZy
YW1lLCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbiksIGNvZGVC
bG9jaywgaGFuZGxlcik7CisgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwg
ZnVuY3Rvcik7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBoYW5kbGVyOwogfQogCi12b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dl
ck9mRXhjZXB0aW9uVG9CZVRocm93bihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBl
eGNlcHRpb24pCit2b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9C
ZVRocm93bihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlv
bikKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7Ci0gICAgRGVidWdnZXIqIGRlYnVn
Z2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAg
RGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KHZtKS0+
ZGVidWdnZXIoKTsKICAgICBpZiAoZGVidWdnZXIgJiYgZGVidWdnZXItPm5lZWRzRXhjZXB0aW9u
Q2FsbGJhY2tzKCkgJiYgIWV4Y2VwdGlvbi0+ZGlkTm90aWZ5SW5zcGVjdG9yT2ZUaHJvdygpKSB7
CiAgICAgICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgaWYgdGhlIGRlYnVnZ2VyIGlzIGVu
YWJsZWQgdGhlbiB0aGVyZSBpcyBubyBpbmxpbmluZy4KICAgICAgICAgLy8gSWYgdGhhdCBhc3N1
bXB0aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZSB0aGVuIHdlJ2xsIGlnbm9yZSB0aGUgaW5saW5l
ZCBjYWxsCkBAIC03MTAsNyArNzEwLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdn
ZXJPZkV4Y2VwdAogICAgICAgICAgICAgaGFzQ2F0Y2hIYW5kbGVyID0gZmFsc2U7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgR2V0Q2F0Y2hIYW5kbGVyRnVuY3RvciBmdW5jdG9yOwotICAg
ICAgICAgICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgICAgICAgICAgU3RhY2tW
aXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAgICAgICAgICAgICBIYW5k
bGVySW5mbyogaGFuZGxlciA9IGZ1bmN0b3IuaGFuZGxlcigpOwogICAgICAgICAgICAgQVNTRVJU
KCFoYW5kbGVyIHx8IGhhbmRsZXItPmlzQ2F0Y2hIYW5kbGVyKCkpOwogICAgICAgICAgICAgaGFz
Q2F0Y2hIYW5kbGVyID0gISFoYW5kbGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZ2V0QXJn
dW1lbnRzRGF0YShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiYsIHB0cmRpZmZfdCYgZmlyc3RQYXJh
bWV0ZXJJbmRleCwgUmVnaXN0ZXIqJiBhcmd2LCBpbnQmIGFyZ2MpOwogICAgICAgICAKICAgICAg
ICAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiB1bndpbmQoVk0mLCBDYWxsRnJhbWUqJiwgRXhj
ZXB0aW9uKiwgVW53aW5kU3RhcnQpOwotICAgICAgICB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZFeGNl
cHRpb25Ub0JlVGhyb3duKENhbGxGcmFtZSosIEV4Y2VwdGlvbiopOworICAgICAgICB2b2lkIG5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiwgQ2FsbEZyYW1lKiwgRXhjZXB0
aW9uKik7CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGRlYnVnKENhbGxGcmFtZSosIERlYnVn
SG9va1R5cGUpOwogICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIHN0YWNrVHJhY2VBc1N0cmluZyhW
TSYsIGNvbnN0IFZlY3RvcjxTdGFja0ZyYW1lPiYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDYgKzc2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludDMyX3QmIHBheWxv
YWQoKTsKICAgICAgICAgaW50MzJfdCYgdGFnKCk7CiAKKyAgICAgICAgdm9pZCogcG9pbnRlcigp
IGNvbnN0OworCiAgICAgICAgIHN0YXRpYyBSZWdpc3RlciB3aXRoSW50KGludDMyX3QgaSkKICAg
ICAgICAgewogICAgICAgICAgICAgUmVnaXN0ZXIgciA9IGpzTnVtYmVyKGkpOwpAQCAtMTk1LDYg
KzE5NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCogUmVnaXN0ZXI6OnBvaW50ZXIoKSBjb25zdAorICAgIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICByZXR1cm4gdS5lbmNvZGVkVmFsdWUucHRyOworI2Vsc2UKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocGF5bG9hZCgpKTsKKyNlbmRpZgorICAgIH0K
KwogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6cGF5bG9hZCgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gdS5lbmNvZGVkVmFsdWUuYXNCaXRzLnBheWxvYWQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNr
ZW4uY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIEV4ZWNTCiAgICAgaWYgKCFtX3N0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBWZWN0b3I8RnJhbWU+IHN0YWNrUmlnaHROb3c7CiAg
ICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoCi0gICAgICAgICAgICBleGVjLCBbJl0gKFN0YWNr
VmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgeworICAgICAgICAgICAg
ZXhlYywgJnZtLCBbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpT
dGF0dXMgewogICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0lubGluZWRGcmFtZSgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKICAgICAg
ICAgICAgICAgICBpZiAodmlzaXRvci0+aXNXYXNtRnJhbWUoKSkgewpAQCAtMTY0LDcgKzE2NCw3
IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAgICAgICAgICAg
ICAgICBib29sIGlzVGFpbERlbGV0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogTWFrZSBzaGFkb3cgY2hpY2tlbiB3b3JrIHdpdGggV2FzbS4KICAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDQxCi0gICAgICAg
ICAgICAgICAgc3RhY2tSaWdodE5vdy5hcHBlbmQoRnJhbWUoanNDYXN0PEpTT2JqZWN0Kj4odmlz
aXRvci0+Y2FsbGVlKCkpLCB2aXNpdG9yLT5jYWxsRnJhbWUoKSwgaXNUYWlsRGVsZXRlZCkpOwor
ICAgICAgICAgICAgICAgIHN0YWNrUmlnaHROb3cuYXBwZW5kKEZyYW1lKGpzQ2FzdDxKU09iamVj
dCo+KHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSwgdmlzaXRvci0+Y2FsbEZyYW1lKCksIGlz
VGFpbERlbGV0ZWQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBzdGFja1JpZ2h0Tm93LnJldmVyc2UoKTsK
QEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIEV4
ZWNTCiAgICAgCiAgICAgVmVjdG9yPEZyYW1lPiB0b1B1c2g7CiAgICAgU3RhY2tWaXNpdG9yOjp2
aXNpdCgKLSAgICAgICAgZXhlYywgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIC0+IFN0YWNr
VmlzaXRvcjo6U3RhdHVzIHsKKyAgICAgICAgZXhlYywgJnZtLCBbJl0gKFN0YWNrVmlzaXRvciYg
dmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgewogICAgICAgICAgICAgaWYgKHZpc2l0
b3ItPmlzSW5saW5lZEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxl
IGlubGluaW5nLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTU2ODYKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFNoYWRvd0NoaWNr
ZW46OnVwZGF0ZShWTSYgdm0sIEV4ZWNTCiAgICAgICAgICAgICAgICAgaWYgKHNjb3BlKQogICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZS0+aW5oZXJpdHModm0sIEpTU2Nv
cGU6OmluZm8oKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChG
cmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSksIGNhbGxGcmFtZSwgaXNU
YWlsRGVsZXRlZCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgc2NvcGUsIGNvZGVCbG9jaywgY2Fs
bEZyYW1lLT5jYWxsU2l0ZUluZGV4KCkpKTsKKyAgICAgICAgICAgIHRvUHVzaC5hcHBlbmQoRnJh
bWUoanNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpLCBjYWxsRnJh
bWUsIGlzVGFpbERlbGV0ZWQsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxGcmFtZS0+Y2FsbFNpdGVJbmRleCgpKSk7CiAKICAgICAgICAgICAgIGlmIChpbmRl
eEluTG9nIDwgbG9nQ3Vyc29ySW5kZXgKICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvbmRpdGlv
biBwcm90ZWN0cyB1cyBmcm9tIHRoZSBjYXNlIHdoZXJlIGFkdmFuY2VJbmRleEluTG9nVG8gZGlk
bid0IGZpbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dD
aGlja2VuSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIFNoYWRvd0NoaWNrZW46Oml0ZXJhdGUoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgRGVmZXJHQyBkZWZl
ckdDKGV4ZWMtPnZtKCkuaGVhcCk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogCiAg
ICAgdXBkYXRlKHZtLCBleGVjKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1TdGFj
a1Zpc2l0b3I6OlN0YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUpCitTdGFja1Zpc2l0
b3I6OlN0YWNrVmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZNKiB2bSkKIHsKICAgICBt
X2ZyYW1lLm1faW5kZXggPSAwOwogICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IGZhbHNlOwog
ICAgIENhbGxGcmFtZSogdG9wRnJhbWU7CiAgICAgaWYgKHN0YXJ0RnJhbWUpIHsKLSAgICAgICAg
bV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IHN0YXJ0RnJhbWUtPnZtKCkudG9wVk1FbnRyeUZyYW1l
OwotICAgICAgICB0b3BGcmFtZSA9IHN0YXJ0RnJhbWUtPnZtKCkudG9wQ2FsbEZyYW1lOworICAg
ICAgICBBU1NFUlQodm0pOworICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lID0gdm0tPnRv
cFZNRW50cnlGcmFtZTsKKyAgICAgICAgdG9wRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1lOwogICAg
ICAgICAKICAgICAgICAgaWYgKHRvcEZyYW1lICYmIHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1l
Lm1fVk1FbnRyeUZyYW1lKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4odG9wRnJhbWUpKSB7CiAgICAg
ICAgICAgICB0b3BGcmFtZSA9IHZtRW50cnlSZWNvcmQobV9mcmFtZS5tX1ZNRW50cnlGcmFtZSkt
Pm1fcHJldlRvcENhbGxGcmFtZTsKQEAgLTEwMyw3ICsxMDQsNyBAQCB2b2lkIFN0YWNrVmlzaXRv
cjo6cmVhZEZyYW1lKENhbGxGcmFtZSogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoY2FsbEZyYW1lLT5jYWxsZWUoKS0+aXNBbnlXYXNtQ2FsbGVlKGNhbGxGcmFtZS0+dm0oKSkp
IHsKKyAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21DYWxsZWUoKSkgewogICAgICAgICByZWFk
Tm9uSW5saW5lZEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NTUsMTAgKzE1NiwxMCBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZE5vbklubGluZWRGcmFtZShD
CiAgICAgbV9mcmFtZS5tX2NhbGxlcklzVk1FbnRyeUZyYW1lID0gbV9mcmFtZS5tX0NhbGxlclZN
RW50cnlGcmFtZSAhPSBtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lOwogICAgIG1fZnJhbWUubV9pc1dh
c21GcmFtZSA9IGZhbHNlOwogCi0gICAgSlNDZWxsKiBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxl
ZSgpOworICAgIENhbGxlZUJpdHMgY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUoKTsKICAgICBt
X2ZyYW1lLm1fY2FsbGVlID0gY2FsbGVlOwogCi0gICAgaWYgKGNhbGxlZS0+aXNBbnlXYXNtQ2Fs
bGVlKCpjYWxsZWUtPnZtKCkpKSB7CisgICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2FsbGVl
KCkpIHsKICAgICAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gdHJ1ZTsKICAgICAgICAgbV9m
cmFtZS5tX2NvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgICAgIG1fZnJhbWUubV9ieXRlY29kZU9m
ZnNldCA9IDA7CkBAIC0yMDQsNyArMjA1LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWRJbmxp
bmVkRnJhbWUoQ2FsbAogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgICAgIG1fZnJhbWUubV9j
YWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIEFTU0VSVChtX2ZyYW1lLmNhbGxlZSgpKTsKKyAgICAg
ICAgQVNTRVJUKCEhbV9mcmFtZS5jYWxsZWUoKS5yYXdQdHIoKSk7CiAKICAgICAgICAgLy8gVGhl
IGNhbGxlckZyYW1lIGp1c3QgbmVlZHMgdG8gYmUgbm9uLW51bGwgdG8gaW5kaWNhdGUgdGhhdCB3
ZQogICAgICAgICAvLyBoYXZlbid0IHJlYWNoZWQgdGhlIGxhc3QgZnJhbWUgeWV0LiBTZXR0aW5n
IGl0IHRvIHRoZSByb290CkBAIC0yNTQsMTQgKzI1NSwxMiBAQCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogU3RhY2tWaXNpdG9yOjpGcmFtCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYg
KGlzV2FzbUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2Fs
bGVlKCkpIHsKLSAgICAgICAgICAgIGlmIChKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVl
ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oKmNhbGxlZS0+dm0oKSwgY2Fs
bGVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOwotICAgICAgICAgICAgLy8gT3RoZXIgd2FzbSBjYWxsZWVzIChlLmcsIHN0dWJzKSBk
b24ndCB1c2UgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLCBzbyBub3RoaW5nIG5lZWRzCi0gICAgICAg
ICAgICAvLyB0byBiZSByZXN0b3JlZCBmb3IgdGhlbS4KKyAgICAgICAgaWYgKGNhbGxlZSgpLmlz
Q2VsbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZShjYWxsZWUoKS5hc0NlbGwoKSkpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgV2FzbTo6V2ViQXNz
ZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUoKS5hc1dhc21DYWxsZWUoKTsKKyAgICAg
ICAgcmV0dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCkBAIC0yNzYsNyArMjc1LDYgQEAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcjo6RnJhbQogU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJh
bWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICBK
U0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpOwogCiAgICAgc3dpdGNoIChjb2RlVHlwZSgp
KSB7CiAgICAgY2FzZSBDb2RlVHlwZTo6V2FzbToKQEAgLTI4OCwxMiArMjg2LDE0IEBAIFN0cmlu
ZyBTdGFja1Zpc2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUKICAgICBjYXNlIENvZGVUeXBlOjpN
b2R1bGU6CiAgICAgICAgIHRyYWNlTGluZSA9IEFTQ0lJTGl0ZXJhbCgibW9kdWxlIGNvZGUiKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZlOgorICAgIGNhc2UgQ29k
ZVR5cGU6Ok5hdGl2ZTogeworICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgp
LmFzQ2VsbCgpOwogICAgICAgICBpZiAoY2FsbGVlKQogICAgICAgICAgICAgdHJhY2VMaW5lID0g
Z2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSgpLT52bSgpLCBqc0Nhc3Q8SlNPYmpl
Y3QqPihjYWxsZWUpKS5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29kZVR5cGU6
OkZ1bmN0aW9uOgotICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Y2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KGNhbGxlZSkpLmltcGwoKTsKKyAg
ICB9CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246IAorICAgICAgICB0cmFjZUxpbmUgPSBn
ZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVj
dCo+KHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpKSkuaW1wbCgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENvZGVUeXBlOjpHbG9iYWw6CiAgICAgICAgIHRyYWNlTGluZSA9IEFTQ0lJTGl0ZXJh
bCgiZ2xvYmFsIGNvZGUiKTsKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6
RnJhbWU6OmR1bXAoUHJpbnRTdHJlCiAgICAgICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiSW5s
aW5lQ2FsbEZyYW1lOiAiLCBSYXdQb2ludGVyKG1faW5saW5lQ2FsbEZyYW1lKSwgIlxuIik7CiAj
ZW5kaWYKIAotICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAiY2FsbGVlOiAiLCBSYXdQb2ludGVy
KGNhbGxlZSgpKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZWU6ICIs
IFJhd1BvaW50ZXIoY2FsbGVlKCkucmF3UHRyKCkpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50
KGluZGVudCwgInJldHVyblBDOiAiLCBSYXdQb2ludGVyKHJldHVyblBDKSwgIlxuIik7CiAgICAg
ICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZXJGcmFtZTogIiwgUmF3UG9pbnRlcihjYWxsZXJG
cmFtZSksICJcbiIpOwogICAgICAgICB1bnNpZ25lZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJh
bWUtPmNhbGxTaXRlQXNSYXdCaXRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWxsZWVC
aXRzLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
CiAjaW5jbHVkZSA8d3RmL0luZGVudGVyLmg+CkBAIC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4g
bV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgfQogICAgICAgICBib29sIGNhbGxlcklzVk1F
bnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc1ZNRW50cnlGcmFtZTsgfQogICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFt
ZTsgfQotICAgICAgICBKU0NlbGwqIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9
CisgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0K
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
azsgfQogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZWNvZGVPZmZzZXQ7IH0KICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUoKSBjb25zdCB7CkBAIC0xMTAsNyArMTExLDcgQEAgcHVibGljOgogICAgICAgICBWTUVudHJ5
RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwogICAgICAgICBWTUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1F
bnRyeUZyYW1lOwogICAgICAgICBDYWxsRnJhbWUqIG1fY2FsbGVyRnJhbWU7Ci0gICAgICAgIEpT
Q2VsbCogbV9jYWxsZWU7CisgICAgICAgIENhbGxlZUJpdHMgbV9jYWxsZWU7CiAgICAgICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgICAgICBz
aXplX3QgbV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKQEAgLTEzMCw5ICsxMzEsOSBAQCBw
dWJsaWM6CiAgICAgLy8gICAgIFN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYpIGNvbnN0
OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHN0
YXRpYyB2b2lkIHZpc2l0KENhbGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgU3RhY2tWaXNpdG9yIHZpc2l0b3Ioc3RhcnRG
cmFtZSk7CisgICAgICAgIFN0YWNrVmlzaXRvciB2aXNpdG9yKHN0YXJ0RnJhbWUsIHZtKTsKICAg
ICAgICAgd2hpbGUgKHZpc2l0b3ItPmNhbGxGcmFtZSgpKSB7CiAgICAgICAgICAgICBTdGF0dXMg
c3RhdHVzID0gZnVuY3Rvcih2aXNpdG9yKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ29u
dGludWUpCkBAIC0xNDYsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW53aW5kVG9NYWNo
aW5lQ29kZUJsb2NrRnJhbWUoKTsKIAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBT
dGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSopOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBnb3RvTmV4dEZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk1LDExICs1OTUsMTUg
QEAgdm9pZCBsaW5rRm9yKAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKICAg
ICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKKyAgICAvLyBP
dXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKKyAg
ICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAg
IEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCiAgICAgVk0mIHZtID0g
Y2FsbGVyRnJhbWUtPnZtKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxs
ZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBk
b24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFz
c2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpID8gd2ViQXNzZW1ibHlPd25l
cihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEpTQ2VsbCog
b3duZXIgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXND
ZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkp
IDogY2FsbGVyQ29kZUJsb2NrOwogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKQEAgLTcxNywxMiArNzIxLDE3IEBAIHZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbCgKICAgICB9CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhl
Yy0+Y2FsbGVyRnJhbWUoKTsKKworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2Vs
bCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBl
bnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxs
ZWUoKS5pc0NlbGwoKSk7CisKICAgICBWTSYgdm0gPSBjYWxsZXJGcmFtZS0+dm0oKTsKICAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAg
ICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFt
ZS0+Y2FsbGVlKCkpOworICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlUb0pT
Q2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7CiAKICAgICAvLyBXZWJBc3Nl
bWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2Vs
bCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFz
c2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkp
IDogY2FsbGVyQ29kZUJsb2NrOwogICAgIEFTU0VSVChvd25lcik7CiAKICAgICBDYWxsVmFyaWFu
dExpc3QgbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJ
KHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgYWRkRXJyb3JJbmZv
QW5kR2V0Qnl0ZWNvZGVPZmZzZXQoRXgKIAogICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQpIHsK
ICAgICAgICAgICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVu
Y3RvcihleGVjKTsKLSAgICAgICAgICAgIHZtLnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9y
KTsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQodm0udG9wQ2FsbEZyYW1lLCAmdm0s
IGZ1bmN0b3IpOwogICAgICAgICAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFt
ZSgpOwogICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsK
ICAgICAgICAgICAgICpieXRlY29kZU9mZnNldCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gMjE0ODMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw4ICsxNTYsMTAgQEAgdm9pZCBFcnJvckluc3RhbmNlOjpmaW5pc2hD
cmVhdGlvbihFeGVjUwogICAgIGJvb2wgaGFzVHJhY2UgPSBhZGRFcnJvckluZm9BbmRHZXRCeXRl
Y29kZU9mZnNldChleGVjLCB2bSwgdGhpcywgdXNlQ3VycmVudEZyYW1lLCBjYWxsRnJhbWUsIGhh
c1NvdXJjZUFwcGVuZGVyKCkgPyAmYnl0ZWNvZGVPZmZzZXQgOiBudWxscHRyKTsKIAogICAgIGlm
IChoYXNUcmFjZSAmJiBjYWxsRnJhbWUgJiYgaGFzU291cmNlQXBwZW5kZXIoKSkgewotICAgICAg
ICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIAorICAgICAgICBpZiAo
Y2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20oKSk7CiAgICAgICAgICAgICBhcHBlbmRTb3Vy
Y2VUb0Vycm9yKGNhbGxGcmFtZSwgdGhpcywgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB9CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NSwxNSArMjk1LDQgQEAgSlNWYWx1ZSBKU0NlbGw6
OmdldFByb3RvdHlwZShKU09iamVjdCosIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLWJvb2wgSlNDZWxsOjppc0FueVdhc21DYWxsZWUoVk0mIHZtKSBjb25zdAotewot
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICByZXR1cm4gaW5oZXJpdHModm0sIEpTV2ViQXNz
ZW1ibHlDYWxsZWU6OmluZm8oKSkgfHwgaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUodGhpcyk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0K
LX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc1N0cmluZygpIGNvbnN0OwogICAgIGJvb2wgaXNTeW1ib2woKSBjb25zdDsK
ICAgICBib29sIGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0FueVdhc21DYWxsZWUoVk0m
KSBjb25zdDsKICAgICBib29sIGlzR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc0N1
c3RvbUdldHRlclNldHRlcigpIGNvbnN0OwogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2
aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTEgKzEyNiwxMiBAQCBpbmxpbmUgdm9pZCBK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWluCiAKIEFMV0FZU19JTkxJTkUgVk0mIEV4ZWNTdGF0
ZTo6dm0oKSBjb25zdAogewotICAgIEFTU0VSVChjYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhbGxl
ZSgpLT52bSgpKTsKLSAgICBBU1NFUlQoIWNhbGxlZSgpLT5pc0xhcmdlQWxsb2NhdGlvbigpKTsK
KyAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOworICAgIEFTU0VS
VChjYWxsZWUpOworICAgIEFTU0VSVChjYWxsZWUtPnZtKCkpOworICAgIEFTU0VSVCghY2FsbGVl
LT5pc0xhcmdlQWxsb2NhdGlvbigpKTsKICAgICAvLyBUaGlzIGlzIGFuIGltcG9ydGFudCBvcHRp
bWl6YXRpb24gc2luY2Ugd2UgYWNjZXNzIHRoaXMgc28gb2Z0ZW4uCi0gICAgcmV0dXJuICpjYWxs
ZWUoKS0+bWFya2VkQmxvY2soKS52bSgpOworICAgIHJldHVybiAqY2FsbGVlLT5tYXJrZWRCbG9j
aygpLnZtKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNDgz
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDEwIEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRv
cjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsK
LSAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYg
KCF2aXNpdG9yLT5jYWxsZWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkNvbnRpbnVlOworCisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChjYWxsZWUgIT0gbV90YXJnZXRDYWxsZWUpCiAg
ICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKIApAQCAtMjc5LDcgKzI4
MiwxMCBAQCBwdWJsaWM6CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVl
ID0gdmlzaXRvci0+Y2FsbGVlKCk7CisgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkuaXND
ZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKworICAg
ICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwogCiAgICAg
ICAgIGlmIChjYWxsZWUgJiYgY2FsbGVlLT5pbmhlcml0cygqY2FsbGVlLT52bSgpLCBKU0JvdW5k
RnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEz
ICsxMTcsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVjb3JkSlNGcmFtZShWZWN0b3I8VW5w
cm9jZXNzZWRTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSkKICAgICB7CiAgICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleDsKLSAgICAgICAgSlNWYWx1ZSB1bnNhZmVDYWxsZWUgPSBtX2Nh
bGxGcmFtZS0+dW5zYWZlQ2FsbGVlKCk7CisgICAgICAgIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVl
ID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxlZSgpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fY2FsbEZyYW1lLT51bnNhZmVDb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVC
bG9jaykgewogICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7
CiAgICAgICAgICAgICBjYWxsU2l0ZUluZGV4ID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxTaXRl
SW5kZXgoKTsKICAgICAgICAgfQotICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9j
ZXNzZWRTdGFja0ZyYW1lKGNvZGVCbG9jaywgSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSks
IGNhbGxTaXRlSW5kZXgpOworICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNz
ZWRTdGFja0ZyYW1lKGNvZGVCbG9jaywgdW5zYWZlQ2FsbGVlLCBjYWxsU2l0ZUluZGV4KTsKICAg
ICAgICAgbV9kZXB0aCsrOwogICAgIH0KIApAQCAtNDg1LDExICs0ODUsMTYgQEAgdm9pZCBTYW1w
bGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgc3RhY2tUcmFjZS5m
cmFtZXMuYXBwZW5kKFN0YWNrRnJhbWUoKSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgYXV0byBz
dG9yZUNhbGxlZUludG9MYXN0RnJhbWUgPSBbJl0gKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRDYWxs
ZWUpIHsKKyAgICAgICAgYXV0byBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUgPSBbJl0gKENhbGxl
ZUJpdHMgY2FsbGVlQml0cykgewogICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsZWUgaWYgaXQn
cyBhIHZhbGlkIEdDIG9iamVjdC4KLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRDYWxsZWUpOwogICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tG
cmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFk
eUhhc0V4ZWN1dGFibGUgPSAhIXN0YWNrRnJhbWUuZXhlY3V0YWJsZTsKKyAgICAgICAgICAgIGlm
IChjYWxsZWVCaXRzLmlzV2FzbSgpKSB7CisgICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFt
ZVR5cGUgPSBGcmFtZVR5cGU6OlVua25vd247CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IGNhbGxlZUJpdHMuYXND
ZWxsKCk7CiAgICAgICAgICAgICBpZiAoIUhlYXBVdGlsOjppc1ZhbHVlR0NPYmplY3QobV92bS5o
ZWFwLCBmaWx0ZXIsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNF
eGVjdXRhYmxlKQogICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZy
YW1lVHlwZTo6VW5rbm93bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhCiBw
dWJsaWM6CiAKICAgICBzdHJ1Y3QgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIHsKLSAgICAgICAgVW5w
cm9jZXNzZWRTdGFja0ZyYW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBFbmNvZGVkSlNWYWx1ZSBj
YWxsZWUsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAgVW5wcm9jZXNzZWRT
dGFja0ZyYW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsZWVCaXRzIGNhbGxlZSwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQogICAgICAgICAgICAgOiB1bnZlcmlmaWVkQ2FsbGVlKGNh
bGxlZSkKICAgICAgICAgICAgICwgdmVyaWZpZWRDb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAg
ICAgICAgLCBjYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpCkBAIC01NywxMyArNTcsMTAgQEAg
cHVibGljOgogICAgICAgICAgICAgOiBjQ29kZVBDKHBjKQogICAgICAgICB7IH0KIAotICAgICAg
ICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnZlcmlm
aWVkQ2FsbGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQqIGND
b2RlUEMgeyBudWxscHRyIH07Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlIHVudmVyaWZpZWRDYWxs
ZWU7CisgICAgICAgIENhbGxlZUJpdHMgdW52ZXJpZmllZENhbGxlZTsKICAgICAgICAgQ29kZUJs
b2NrKiB2ZXJpZmllZENvZGVCbG9jayB7IG51bGxwdHIgfTsKICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkg
KzQyLDEwIEBAIGludHB0cl90IFN0YWNrRnJhbWU6OnNvdXJjZUlEKCkgY29uc3QKIAogU3RyaW5n
IFN0YWNrRnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiB7CisgICAgaWYgKG1faXNXYXNtRnJhbWUp
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CisKICAgICBpZiAo
IW1fY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChtX2NhbGxlZSAmJiBtX2NhbGxlZS0+aXNBbnlX
YXNtQ2FsbGVlKCptX2NhbGxlZS0+dm0oKSkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJbd2FzbSBjb2RlXSIpOwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJbbmF0aXZl
IGNvZGVdIik7CiAgICAgfQogCkBAIC01Niw2ICs1Nyw5IEBAIFN0cmluZyBTdGFja0ZyYW1lOjpz
b3VyY2VVUkwoKSBjb25zdAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2
bSkgY29uc3QKIHsKKyAgICBpZiAobV9pc1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiPHdhc20+Iik7CisKICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgc3dp
dGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgICAgICBjYXNlIEV2YWxDb2RlOgpA
QCAtNzIsOCArNzYsNiBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkg
CiAgICAgfQogICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChtX2NhbGxlZSkgewotICAgICAgICBp
ZiAobV9jYWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiPHdhc20+Iik7CiAgICAgICAgIGlmIChtX2NhbGxlZS0+
aXNPYmplY3QoKSkKICAgICAgICAgICAgIG5hbWUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
dm0sIGpzQ2FzdDxKU09iamVjdCo+KG1fY2FsbGVlLmdldCgpKSkuaW1wbCgpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9u
IDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBKU09iamVjdDsKIAogY2xhc3Mg
U3RhY2tGcmFtZSB7CiBwdWJsaWM6CisgICAgU3RhY2tGcmFtZSgpID0gZGVmYXVsdDsKKwogICAg
IFN0YWNrRnJhbWUoVk0mIHZtLCBKU0NlbGwqIGNhbGxlZSkKICAgICAgICAgOiBtX2NhbGxlZSh2
bSwgY2FsbGVlKQogICAgIHsgfQpAQCAtNDUsNiArNDcsMTMgQEAgcHVibGljOgogICAgICAgICAs
IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAgeyB9CiAKKyAgICBzdGF0aWMg
U3RhY2tGcmFtZSB3YXNtKCkKKyAgICB7CisgICAgICAgIFN0YWNrRnJhbWUgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9pc1dhc21GcmFtZSA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICEhbV9jb2RlQmxvY2s7IH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVu
c2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKQEAgLTY1LDcgKzc0LDcgQEAg
cHJpdmF0ZToKICAgICBTdHJvbmc8SlNDZWxsPiBtX2NhbGxlZSB7IH07CiAgICAgU3Ryb25nPENv
ZGVCbG9jaz4gbV9jb2RlQmxvY2sgeyB9OwogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQg
eyBVSU5UX01BWCB9OwotICAgIAorICAgIGJvb2wgbV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw2IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJl
LnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogICAgIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIFdlYkFzc2VtYmx5VG9KU0NhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogI2VuZGlmCkBAIC02MTYsMTQgKzYxNSwxNCBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsCiAKICAgICBBU1NFUlQoZXhlYyA9PSB0b3BDYWxsRnJhbWUgfHwgZXhl
YyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKIAotICAgIGludGVy
cHJldGVyLT5ub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihleGVjLCBleGNlcHRp
b24pOworICAgIGludGVycHJldGVyLT5ub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93
bigqdGhpcywgZXhlYywgZXhjZXB0aW9uKTsKIAogICAgIHNldEV4Y2VwdGlvbihleGNlcHRpb24p
OwogfQogCiBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdGhyb3duVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSAqdGhpczsKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhjZXB0
aW9uKj4odm0sIHRocm93blZhbHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikKICAgICAgICAgZXhj
ZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw2
IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2Vt
Ymx5Q2FsbGVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9K
U0NhbGxlZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVC
bG9ja1N0cnVjdHVyZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MjIsNyArOTIyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90
IGZ1bgogICAgICAgICBWYWx1ZSogY29kZUJsb2NrID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywKICAgICAgICAgICAgIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2soKSk7CiAgICAgICAgIFZhbHVlKiBqdW1wRGVzdGluYXRpb24gPSBpc0pTQmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAotICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0
T2ZJbXBvcnRXYXNtVG9KU1N0dWIobV9pbmZvLmludGVybmFsRnVuY3Rpb25Db3VudCgpLCBmdW5j
dGlvbkluZGV4KSk7CisgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
Y29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pT
U3R1YihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAgIFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigp
LCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFsmXSAoUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ29udGV4dC5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAgQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIFdhc20gewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMTQ4MzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsTGlua0luZm87CiBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBjbGFzcyBKU1By
b21pc2VEZWZlcnJlZDsKIAogbmFtZXNwYWNlIFdhc20gewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMyArMzksMTcgQEAgdm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBG
dW5jdAogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJu
YWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVy
bmFsRnVuY3Rpb25JbmRleCkgewogICAgICAgICBXYXNtSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgp
OwogCi0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2Fz
bUVudHJ5cG9pbnQpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1
bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwganNFbnRyeXBvaW50Q2FsbGVlKTsK
KyAgICAgICAgYXV0byB3cmFwQ2FsbGVlID0gW10gKFdlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUp
IC0+IHZvaWQqIHsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgfCAxKTsKKyAgICAgICAgfTsKIAotICAgICAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxs
ZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAgICAgICAgUmVmPFdhc206
OldlYkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpXZWJBc3NlbWJs
eUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNtRW50cnlwb2ludCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmpzVG9XYXNt
Q2FsbGVlTW92ZUxvY2F0aW9uLCB3cmFwQ2FsbGVlKGpzRW50cnlwb2ludENhbGxlZS5wdHIoKSkp
OwogCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSk7CisgICAgICAgIFJlZjxXYXNtOjpXZWJBc3Nl
bWJseUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpXZWJBc3NlbWJseUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1vdmVMb2Nh
dGlvbiwgd3JhcENhbGxlZSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOworCisgICAgICAg
IGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShqc0VudHJ5cG9pbnRDYWxs
ZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkocmV2aXNpb24gMjE0ODMw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDYgKzcwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2Vw
dGlvbkZyb20KICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAgICAgIEFTU0VS
VCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIEFTU0VSVCghIXZtLT50YXJnZXRN
YWNoaW5lUENGb3JUaHJvdyk7CisgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBoYWNrLCBidXQg
dGhlIGxsaW50IChib3RoIG9wX2NhdGNoIGFuZCBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbikKKyAg
ICAgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBW
TS4gVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgIC8vIHRoaXMgc2lu
Y2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuCisgICAgICAgIC8v
IEZJWE1FOiBpcyB0aGlzIHRvbyBtdWNoIG9mIGEgaGFjaz8KKyAgICAgICAgYml0d2lzZV9jYXN0
PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKICAgICAgICAg
cmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKICAgICB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzIgKzI4LDE2IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCi1uYW1lc3BhY2UgSlNDIHsKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxwdHIsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKLQotSlNXZWJBc3NlbWJs
eUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2bS53
ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKLXsgfQotCi12b2lkIEpTV2ViQXNzZW1i
bHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAgbV9lbnRyeXBv
aW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKLSAgICBXYXNtOjpyZWdpc3RlckNvZGUobV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK1dlYkFzc2VtYmx5Q2FsbGVlOjpXZWJBc3NlbWJseUNhbGxlZShFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCkKKyAgICA6IG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogewot
ICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1dlYkFz
c2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5yZWdpc3RlckNvZGUodGhpc09iamVj
dC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYo
KS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKLSAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2Vt
Ymx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOworICAgIHJlZ2lzdGVyQ29kZShtX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0
KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCShyZXZp
c2lvbiAyMTQ4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDUgKzI3LDMyIEBACiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJSZWdpc3RlckF0
T2Zmc2V0TGlzdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNl
IEpTQyB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBKU1dlYkFz
c2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBXZWJBc3NlbWJseUNhbGxlZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJBc3NlbWJseUNhbGxlZT4geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQor
ICAgIHN0YXRpYyBSZWY8V2ViQXNzZW1ibHlDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50
JiYgZW50cnlwb2ludCkKICAgICB7Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxl
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxsZWU+KHZtLmhl
YXApKSBKU1dlYkFzc2VtYmx5Q2FsbGVlKHZtKTsKLSAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVh
dGlvbih2bSwgV1RGTW92ZShlbnRyeXBvaW50KSk7Ci0gICAgICAgIHJldHVybiBjYWxsZWU7Cisg
ICAgICAgIFdlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBuZXcgV2ViQXNzZW1ibHlDYWxsZWUo
V1RGTW92ZShlbnRyeXBvaW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqY2FsbGVlKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCi0gICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0K
LQotICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQog
ICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24t
PmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVyczsgfQogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBXZWJB
c3NlbWJseUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYpOwogCiAgICAgV2FzbTo6RW50cnlwb2lu
dCBtX2VudHJ5cG9pbnQ7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBKU0MKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDgg
KzQ3LDcgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZAogICAgIG1f
bW9kdWxlLnNldCh2bSwgdGhpcywgb3duZXIpOwogICAgIEFTU0VSVCghbW9kdWxlKCktPmNvZGVC
bG9jayhtb2RlKSk7CiAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwgbW9kZSwgdGhpcyk7
Ci0KLSAgICBtZW1zZXQoY2FsbGVlcygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPikgKiAyKTsKKyAgICBtX2NhbGxlZXMucmVzaXpl
KG1fY2FsbGVlQ291bnQgKiAyKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpp
bml0aWFsaXplKCkKQEAgLTU3LDcgKzU2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
Ojppbml0aWFsaXplKAogICAgICAgICByZXR1cm47CiAKICAgICBWTSYgdm0gPSBwbGFuKCkudm0o
KTsKLSAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
QVNTRVJUX1VOVVNFRCh2bSwgdm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIXBsYW4oKS5oYXNXb3JrKCkpOwogCiAgICAgaWYgKHBsYW4oKS5m
YWlsZWQoKSkgewpAQCAtNzQsMTEgKzczLDExIEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
azo6aW5pdGlhbGl6ZSgKIAogICAgIC8vIFRoZSBjb2RlIGEgbW9kdWxlIGVtaXRzIHRvIGNhbGwg
aW50byBKUyByZWxpZXMgb24gdXMgdG8gc2V0IHRoaXMgdXAuCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fd2FzbUV4aXRTdHVicy5zaXplKCk7IGkrKykKLSAgICAgICAgaW1wb3J0V2Fz
bVRvSlNTdHViKG1fY2FsbGVlQ291bnQsIGkpID0gbV93YXNtRXhpdFN0dWJzW2ldLndhc21Ub0pz
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBpbXBvcnRXYXNtVG9KU1N0dWIo
aSkgPSBtX3dhc21FeGl0U3R1YnNbaV0ud2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAKLSAgICBwbGFuKCkuaW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgewotICAgICAgICBzZXRKU0VudHJ5cG9p
bnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCBqc0VudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICBz
ZXRXYXNtRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIHdhc21FbnRyeXBvaW50Q2Fs
bGVlKTsKKyAgICBwbGFuKCkuaW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgUmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIGpzRW50cnlwb2ludENhbGxlZSwg
UmVmPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7Cisg
ICAgICAgIHNldEpTRW50cnlwb2ludENhbGxlZShjYWxsZWVJbmRleCwgV1RGTW92ZShqc0VudHJ5
cG9pbnRDYWxsZWUpKTsKKyAgICAgICAgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoY2FsbGVlSW5k
ZXgsIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICB9KTsKIAogICAgIG1fcGxh
biA9IG51bGxwdHI7CkBAIC0xMTgsOCArMTE3LDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjp2aXNpdENoaWxkcgogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQgKiAyOyBp
KyspCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXSk7CiAK
ICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5j
b25kaXRpb25hbEZpbmFsaXplcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTQ4
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0NlbGwu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiUHJvbWlzZURl
ZmVycmVkVGltZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVy
LCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVk
IGNhbGxlZUNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KQogICAgIHsKLSAgICAg
ICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJs
eUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQsIGZ1bmN0aW9u
SW1wb3J0Q291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdU
Rk1vdmUocGxhbiksIGNhbGxlZUNvdW50KTsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxs
b2NhdGlvblNpemUoZnVuY3Rpb25JbXBvcnRDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KHZtLCBvd25lciwgbW9kZSwgV1RGTW92ZShwbGFuKSwgY2FsbGVlQ291bnQpOwogICAgICAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkBAIC03NSw0NyArNzYsNDMgQEAgcHVibGljOgogICAgIFN0cmluZyYgZXJyb3JNZXNzYWdlKCkg
eyBBU1NFUlQoIXJ1bm5hYmxlKCkpOyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KICAgICBib29s
IGlzU2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25zdDsKIAotICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNh
bGxlZT4ganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5zaWduZWQg
Y2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0g
ICAgICAgIHJldHVybiBjYWxsZWVzKClbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICByZXR1
cm4gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNh
bGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0
aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25l
ZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQo
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsK
LSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdl
dCgpOworICAgICAgICByZXR1cm4gbV9jYWxsZWVzW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3Vu
dF0uZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoVk0mIHZt
LCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAg
IHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8
V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IGNhbGxlZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIGNhbGxlZXMoKVtj
YWxsZWVJbmRleF0uc2V0KHZtLCB0aGlzLCBjYWxsZWUpOworICAgICAgICBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXhdID0gY2FsbGVlOwogICAgIH0KIAotICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRD
YWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y2FsbGVlKQorICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodW5zaWduZWQgY2FsbGVl
SW5kZXgsIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4gY2FsbGVlKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAg
ICAgY2FsbGVlcygpW2NhbGxlZUluZGV4ICsgbV9jYWxsZWVDb3VudF0uc2V0KHZtLCB0aGlzLCBj
YWxsZWUpOworICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XSA9
IGNhbGxlZTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4q
IGNhbGxlZXMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlDYWxsZWU+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygp
KTsgfQotCiAgICAgdm9pZCogd2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBv
cnRJbmRleCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEluZGV4IDwgbV93
YXNtRXhpdFN0dWJzLnNpemUoKSk7CiAgICAgICAgIHJldHVybiBtX3dhc21FeGl0U3R1YnNbaW1w
b3J0SW5kZXhdLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQg
Y2FsbGVlQ291bnQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewot
ICAgICAgICByZXR1cm4gb2Zmc2V0T2ZDYWxsZWVzKCkKLSAgICAgICAgICAgICsgKHNpemVvZihX
cml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogY2FsbGVlQ291bnQgKiAyKQotICAg
ICAgICAgICAgKyAoc2l6ZW9mKHZvaWQqKSAqIGltcG9ydEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleDsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0xMjUsMjEgKzEyMiwxOSBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNh
bGxlZXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRTdHVicygpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9j
aykpOworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lk
Kik+KHNpemVvZihKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBjYWxsZWVDb3VudCwgdW5zaWduZWQgZnVu
Y3Rpb25JbXBvcnRDb3VudCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2ln
bmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gb2Zmc2V0T2ZD
YWxsZWVzKCkKLSAgICAgICAgICAgICsgKHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNhbGxlZT4pICogY2FsbGVlQ291bnQgKiAyKQotICAgICAgICAgICAgKyAoc2l6ZW9mKHZvaWQq
KSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQpOworICAgICAgICByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRT
dHVicygpICsgc2l6ZW9mKHZvaWQqKSAqIGZ1bmN0aW9uSW1wb3J0Q291bnQ7CiAgICAgfQogCi0g
ICAgdm9pZComIGltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBjYWxsZWVDb3VudCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgpCisgICAgdm9pZComIGltcG9ydFdhc21Ub0pTU3R1Yih1bnNpZ25lZCBp
bXBvcnRJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PHZvaWQqKj4o
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKGNh
bGxlZUNvdW50LCBpbXBvcnRJbmRleCkpOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2
b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pT
U3R1YihpbXBvcnRJbmRleCkpOwogICAgIH0KIAogICAgIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIgOiBwdWJsaWMgSlNDOjpVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKQEAgLTE1MCw2ICsx
NDUsNyBAQCBwcml2YXRlOgogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlv
bmFsRmluYWxpemVyOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAg
ICBWZWN0b3I8V2FzbTo6V2FzbUV4aXRTdHVicz4gbV93YXNtRXhpdFN0dWJzOworICAgIFZlY3Rv
cjxSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+PiBtX2NhbGxlZXM7CiAgICAgLy8gVGhl
IHBsYW4gdGhhdCBpcyBjb21waWxpbmcgdGhpcyBjb2RlIGJsb2NrLgogICAgIFJlZlB0cjxXYXNt
OjpQbGFuPiBtX3BsYW47CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1
cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+
KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pKTsgfQogCisgICAgV2ViQXNzZW1ibHlUb0pTQ2FsbGVl
KiB3ZWJBc3NlbWJseVRvSlNDYWxsZWUoKSB7IHJldHVybiBtX2NhbGxlZS5nZXQoKTsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgdW5z
aWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
SlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yLmNwcAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IENsYXNzSW5m
byBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5SdW50
aW1lRXJyb3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IpIH07CisKIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IqIEpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhdXRvKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3I+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKHZtLCBzdHJ1Y3R1cmUp
OwpAQCAtNDYsOSArNDgsNiBAQCBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpKU1dlYkFzc2Vt
Ymx5CiB7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IpIH07Ci0KLSAgICAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAg
Ly8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiBhcyB0
aGUgY2FsbGVlIHRvIGJlZ2luIHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgogICAgIC8vIFRo
ZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1heSBzdGFj
ayBvdmVyZmxvdywgYW5kIHRoZSBzdGFjayBvdmVyZmxvdwotICAgIC8vIGhhbmRsZXIgbWlnaHQg
cmVhZCB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFzc2VtYmx5
Q2FsbGVlIGRvZXNuJ3QgaGF2ZSBhCisgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9i
YWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIFdlYkFzc2VtYmx5Q2FsbGVlIGRvZXNuJ3Qg
aGF2ZSBhCiAgICAgLy8gZ2xvYmFsIG9iamVjdCwgYnV0IHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9u
IGRvZXMuCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgcHJvdG9DYWxs
RnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rpb24sIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50
LCByZW1haW5pbmdBcmdzKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAK
LVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rp
b24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50LCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIE5v
SW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2Vi
QXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9u
OjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50
cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fd2FzbUVudHJ5UG9pbnRDb2Rl
KHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkpCiAgICAgLCBtX3NpZ25hdHVyZUluZGV4KHNp
Z25hdHVyZUluZGV4KQpAQCAtMTg2LDE4ICsxODYsMTYgQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNFbnRyeXBvaW50KTsKLSAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3dhc21FbnRyeXBvaW50KTsKIH0KIAotdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50KQordm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBXYXNt
OjpXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKICAgICBtX2luc3RhbmNlLnNldCh2bSwgdGhpcywgaW5zdGFuY2Up
OwogICAgIEFTU0VSVChqc0VudHJ5cG9pbnQgIT0gd2FzbUVudHJ5cG9pbnQpOwotICAgIG1fanNF
bnRyeXBvaW50LnNldCh2bSwgdGhpcywganNFbnRyeXBvaW50KTsKLSAgICBtX3dhc21FbnRyeXBv
aW50LnNldCh2bSwgdGhpcywgd2FzbUVudHJ5cG9pbnQpOworICAgIG1fanNFbnRyeXBvaW50ID0g
anNFbnRyeXBvaW50OworICAgIG1fd2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50cnlwb2ludDsKICAg
ICBBU1NFUlQobV93YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpID09IG1fd2FzbUVudHJ5UG9p
bnRDb2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjE0ODMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCBXYXNtOjpXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBXYXNtOjpX
ZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4KTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KQEAgLTYzLDE1ICs2MywxNyBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlw
b2ludCwgV2FzbTo6V2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50KTsKIAogcHJpdmF0
ZToKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206
OldlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICB2b2lkKiBtX3dh
c21FbnRyeVBvaW50Q29kZTsgLy8gQ2FjaGUgY29kZSBwb2ludGVyOiBhbGxvd3MgdGhlIHdhc20g
LT4gd2FzbSBzdHViIHRvIGRvIGEgc2luZ2xlIGxvYWQgYW5kIGp1bXAgaW5zdGVhZCBvZiBoYXZp
bmcgZGVwZW5kZW50IGxvYWRzLgotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVl
PiBtX2pzRW50cnlwb2ludDsKLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4g
bV93YXNtRW50cnlwb2ludDsKKyAgICAvLyBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gdGhl
c2UsIHNpbmNlIHdlIGhhdmUgYSByZWZlcmVuY2UgdG8gb3VyCisgICAgLy8gaW5zdGFuY2UsIHdo
aWNoIGtlZXBzIGFsaXZlIHRoZSBDb2RlQmxvY2ssIHdoaWNoIG93bnMgdGhpcyBwb2ludGVyLgor
ICAgIFdhc206OldlYkFzc2VtYmx5Q2FsbGVlKiBtX2pzRW50cnlwb2ludDsKKyAgICBXYXNtOjpX
ZWJBc3NlbWJseUNhbGxlZSogbV93YXNtRW50cnlwb2ludDsKICAgICAvLyBJdCdzIHNhZmUgdG8g
anVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5kZXggYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0
aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNp
Z25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJ
KHJldmlzaW9uIDIxNDgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDExICsxMjUsMTEg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAg
ICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2Jq
ZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAgICAgICAgICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVu
YyB0byBmdW5jcy4KICAgICAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAg
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29k
ZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5k
SW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFdhc206Oldl
YkFzc2VtYmx5Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPFdhc206OldlYkFzc2VtYmx5Q2FsbGVlPiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9
IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUs
IHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZXhwLmZpZWxk
LCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLmdldCgpLCB3YXNtRW50cnlwb2ludENhbGxl
ZS5nZXQoKSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUg
PSBmdW5jdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk2LDkg
KzE5Niw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAg
ICAgICAgIEpTT2JqZWN0KiBzdGFydEZ1bmN0aW9uID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9u
KHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5z
ZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5q
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlKTsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpz
RW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsK
KyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpXZWJBc3NlbWJseUNhbGxlZT4ganNFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpX
ZWJBc3NlbWJseUNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21F
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBvaW50Q2FsbGVlLmdldCgpLCB3
YXNtRW50cnlwb2ludENhbGxlZS5nZXQoKSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
bV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAg
fQpAQCAtMjcwLDE1ICsyNzAsMTUgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6V2ViQXNzZW1ibHlDYWxsZWU+IHdhc21FbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBs
b2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAwLgogICAgICAgICAgICAgICAg
IC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5k
ZXggMC4KICAgICAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0
cy5mb28gPT09IHRhYmxlLmdldCgwKT8KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI1CiAgICAgICAgICAgICAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoCi0g
ICAgICAgICAgICAgICAgICAgIHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGpzRW50cnlw
b2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNFbnRyeXBvaW50
Q2FsbGVlLmdldCgpLCB3YXNtRW50cnlwb2ludENhbGxlZS5nZXQoKSwgc2lnbmF0dXJlSW5kZXgp
OwogCiAgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJsZUluZGV4LCBm
dW5jdGlvbik7CiAgICAgICAgICAgICAgICAgKyt0YWJsZUluZGV4OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMTQ4
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsMTIgKzMwNCwxMiBAQCBET01XaW5kb3cmIGNhbGxlckRPTVdp
bmRvdyhFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlz
aXRvci0+Y29kZUJsb2NrKCkpCiAgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmlz
aXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxs
ZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KICAgICAg
ICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5
IGdldCB0aGUgZ2xvYmFsIG9iamVjdAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1t
b3N0IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU3MjEKLSAgICAgICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkgJiYgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxs
KCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpLT5nbG9iYWxPYmplY3Qo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7
CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306164</attachid>
            <date>2017-04-03 22:07:23 -0700</date>
            <delta_ts>2017-04-04 12:08:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>120849</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NiBA
QAorMjAxNy0wNC0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWJBc3NlbWJseTogSlNXZWJBc3NlbWJseUNhbGxlZSBzaG91bGQgbm90IGJlIGEgSlNDZWxs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGlzIHBlcmhhcHMgdGhlIGxhc3QgYmlnIGNoYW5nZSB0byB0aGUgZGVzaWduIG9mIGZ1bmRh
bWVudGFsCisgICAgICAgIFdhc20gQVBJIHRvIGFsbG93IGZvciBQSUMuIEl0IGNoYW5nZXMgSlNX
ZWJBc3NlbWJseUNhbGxlZSBpbnRvIGEgdGhpbmcKKyAgICAgICAgY2FsbGVkIFdhc206OkNhbGxl
ZS4gSXQgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgYmVmb3JlLCBleGNlcHQKKyAgICAgICAg
V2FzbTo6Q2FsbGVlIGlzIG5vdCBhIEpTQ2VsbC4gSSBoYWQgdG8gcmVmYWN0b3IgdGhlIHZhcmlv
dXMgcGFydHMgb2YgdGhlCisgICAgICAgIHJ1bnRpbWUgdGhhdCB3aWxsIHNlZSBDYWxsRnJhbWUn
cyB3aXRoIFdhc206OkNhbGxlZSdzIGluIHRoZSBjYWxsZWUgc2xvdC4KKyAgICAgICAgVGhhbmtm
dWxseSwgdGhlIHBhcnRzIG9mIHRoZSBydW50aW1lIHRoYXQgV2FzbSB0b3VjaGVzIGFyZSBsaW1p
dGVkLiBUaGUKKyAgICAgICAgbWFpbiByZWZhY3RvcmluZyBpcyBjaGFuZ2luZyB0aGUgZXhjZXB0
aW9uIGhhbmRsaW5nIGNvZGUsIHN1Y2ggYXMgdGFraW5nCisgICAgICAgIGEgc3RhY2sgdHJhY2Us
IHRvIGJlIGZyaWVuZGx5IHRvIHNlZWluZyBhIG5vbiBKU0NlbGwgY2FsbGVlLgorICAgICAgICAK
KyAgICAgICAgVGhlIGNhbGxlZSgpIGZ1bmN0aW9uIG9uIEV4ZWNTdGF0ZSBub3cgcmV0dXJucyBh
IGNsYXNzIEkgYWRkZWQgaW4gdGhpcworICAgICAgICBwYXRjaCBjYWxsZWQgQ2FsbGVlQml0cy4g
Q2FsbGVlQml0cyB3aWxsIHRlbGwgeW91IGlmIHRoZSBjYWxsZWUgaXMgYQorICAgICAgICBKU0Nl
bGwgb3IgYSBXYXNtOjpDYWxsZWUuIFdlIHRhZyBXYXNtOjpDYWxsZWUncyB3aXRoIGEgMSBpbiB0
aGVpciBsb3dlcgorICAgICAgICBiaXQgc28gd2UgY2FuIGVhc2lseSB0ZWxsIHdoYXQgaXMgYW5k
IGlzbid0IGEgV2FzbTo6Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVGhlIHN0dWIgdGhhdCBj
YWxscyBvdXQgZnJvbSBXYXNtIHRvIEpTIHN0aWxsIHB1dHMgYSBKU0NlbGwgY2FsbGVlCisgICAg
ICAgIGludG8gdGhlIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHRoZSBjYWxsZWUgbG9naWNhbGx5
IHJlcHJlc2VudHMgYQorICAgICAgICBXYXNtIGZyYW1lLiBUaGUgcmVhc29uIGZvciB0aGlzIGlz
IHRoYXQgd2UgdXNlIHRoZSBjYWxsIElDIGluZnJhc3RydWN0dXJlCisgICAgICAgIHRvIG1ha2Ug
YSBjYWxsIG91dCB0byBKUyBjb2RlLCBhbmQgdGhlIGNvZGUgdGhhdCB3cml0ZXMgdGhlIElDIGV4
cGVjdHMKKyAgICAgICAgYSBKU0NlbGwgYXMgdGhlIGNhbGxlZS4gVGhpcyBpcyBrbm93aW5nbHkg
cGFydCBvZiBvdXIgZGVzaWduLiBXaGVuIHdlCisgICAgICAgIGRvIHN0cnVjdHVyZWQgY2xvbmlu
ZyBvZiBXYXNtIE1vZHVsZXMsIHdlJ2xsIG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGVzZQorICAgICAg
ICBKUyBjYWxsIHN0dWJzLgorCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChCYWNrdHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y3VycmVudERlYnVn
Z2VyQ2FsbEZyYW1lKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZTo6RGVidWdnZXJDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6aXNBbnlXYXNtQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFt
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZUFzVmFsdWUpOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmpzQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxs
ZWUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuc2FmZUNhbGxlZSk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6c2NvcGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Oml0ZXJhdGUp
OgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxlZUJpdHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNhbGxlZUJpdHM6OkNhbGxlZUJpdHMpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjpv
cGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjppc1dhc20pOgorICAgICAgICAo
SlNDOjpDYWxsZWVCaXRzOjppc0NlbGwpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjphc0Nl
bGwpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjphc1dhc21DYWxsZWUpOgorICAgICAgICAo
SlNDOjpDYWxsZWVCaXRzOjpyYXdQdHIpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0U3RhY2tUcmFjZUZ1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSk6CisgICAgICAgIChK
U0M6Om5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5j
dG9yOjpVbndpbmRGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
dW53aW5kKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNl
cHRpb25Ub0JlVGhyb3duKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVy
Ojpwb2ludGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2hhZG93Q2hpY2tlbjo6dXBkYXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpp
dGVyYXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpTdGFja1Zpc2l0b3I6OlN0YWNrVmlzaXRvcik6CisgICAgICAgIChKU0M6OlN0YWNr
VmlzaXRvcjo6cmVhZEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9u
SW5saW5lZEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZy
YW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSk6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXApOgorICAgICAgICAqIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZy
YW1lOjpjYWxsZWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnZpc2l0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAo
SlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAo
Y2FsbFdhc21GdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6YWRkRXJy
b3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aXNB
bnlXYXNtQ2FsbGVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnZtKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpS
ZXRyaWV2ZUFyZ3VtZW50c0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpSZXRy
aWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OnJlY29yZEpTRnJhbWUpOgorICAgICAg
ICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToK
KyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6VW5wcm9jZXNzZWRTdGFja0ZyYW1lOjpVbnByb2Nlc3NlZFN0YWNrRnJh
bWUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OlN0
YWNrRnJhbWU6OnNvdXJjZVVSTCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmZ1bmN0aW9u
TmFtZSk6CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6CisgICAgICAgIChKU0M6OlN0
YWNrRnJhbWU6Ondhc20pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5n
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAgICAgICogd2FzbS9X
YXNtQ2FsbGVlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAuCisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNh
bGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlz
aENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6
ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5Q2FsbGVlOjplbnRyeXBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUNhbGxlZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgor
ICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNl
cHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzZXRXYXNt
RW50cnlwb2ludENhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
Om9mZnNldE9mSW1wb3J0U3R1YnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmltcG9ydFdhc21Ub0pTU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ci5jcHA6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
OjpXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0VudHJ5cG9pbnQpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlQb2ludENvZGUp
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKwogMjAxNy0wNC0wMyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGluY29ycmVjdCBjYXBh
Y2l0eSBkZWx0YSBjYWxjdWxhdGlvbiByZXBvcnRlZCBpbiBTcGFyc2VBcnJheVZhbHVlTWFwOjph
ZGQoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIx
NDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtOTM2LDYgKzkzNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
d2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogICAgIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCiAg
ICAgd2FzbS9XYXNtQmluZGluZy5jcHAKKyAgICB3YXNtL1dhc21DYWxsZWUuY3BwCiAgICAgd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCiAgICAgd2FzbS9XYXNtQ29udGV4dC5jcHAKICAg
ICB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC05NTEsNyArOTUyLDYgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL1dhc21WYWxpZGF0ZS5jcHAKICAgICB3
YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAotICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5j
cHAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiAgICAgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBACiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiTExJ
bnREYXRhLmgiCkBAIC0zMTU3LDcgKzMxNTcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBib3goRXhlY1N0
YXRlKiBleGVjLCBWTSYgCiB9CiAKIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY4NTgyLgotc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihW
TSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykKK3N0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXYXNt
OjpDYWxsZWUqIHdhc21DYWxsZWUsIGNvbnN0IEFyZ0xpc3QmIGJveGVkQXJncykKIHsKICAgICBK
U1ZhbHVlIGZpcnN0QXJndW1lbnQ7CiAgICAgaW50IGFyZ0NvdW50ID0gMTsKQEAgLTMyMDIsMTUg
KzMyMDIsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAg
IGlmIChwbGFuLT5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSAhPSBmdW5jdGlvbkNvdW50KQogICAg
ICAgICBDUkFTSCgpOwogCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgY2FsbGVlczsKLSAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBrZWVwQWxpdmU7CisgICAgVmVjdG9yPFJlZjxXYXNtOjpDYWxs
ZWU+PiBjYWxsZWVzOworICAgIFZlY3RvcjxSZWY8V2FzbTo6Q2FsbGVlPj4ga2VlcEFsaXZlOwog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gVUlOVF9NQVg7CiAgICAgICAgIHBs
YW4tPmluaXRpYWxpemVDYWxsZWVzKAotICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICAgICAgWyZdICh1bnNp
Z25lZCBjYWxsZWVJbmRleCwgUmVmPFdhc206OkNhbGxlZT4mJiBqc0VudHJ5cG9pbnRDYWxsZWUs
IFJlZjxXYXNtOjpDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0gMSA9PSBs
YXN0SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChqc0VudHJ5cG9pbnRD
YWxsZWUpOwotICAgICAgICAgICAgICAgIGtlZXBBbGl2ZS5hcHBlbmQod2FzbUVudHJ5cG9pbnRD
YWxsZWUpOworICAgICAgICAgICAgICAgIGNhbGxlZXMuYXBwZW5kKFdURk1vdmUoanNFbnRyeXBv
aW50Q2FsbGVlKSk7CisgICAgICAgICAgICAgICAga2VlcEFsaXZlLmFwcGVuZChXVEZNb3ZlKHdh
c21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gY2FsbGVl
SW5kZXg7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0zMjM4LDcgKzMyMzgsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgICAgICBKU1ZhbHVl
IGNhbGxSZXN1bHQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgICAgIGNhbGxSZXN1bHQgPSBj
YWxsV2FzbUZ1bmN0aW9uKCZ2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc0Nhc3Q8
SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkpLCBib3hlZEFyZ3MpOworICAgICAg
ICAgICAgICAgIGNhbGxSZXN1bHQgPSBjYWxsV2FzbUZ1bmN0aW9uKCZ2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBjYWxsZWVzW2ldLnB0cigpLCBib3hlZEFyZ3MpOwogICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBKU1ZhbHVlIGV4cGVjdGVkID0gYm94KGV4ZWMsIHZtLCByZXN1bHQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24g
MjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjAsOSArMjYwLDExIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1f
cmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUpIHsKICAgICAgICAgICAgIC8vIElmIGNh
bGxlZSBpcyB1bmtub3duLCBidXQgd2UndmUgbm90IGFkZGVkIGFueSBmcmFtZSB5ZXQsIHdlIHNo
b3VsZAogICAgICAgICAgICAgLy8gc3RpbGwgYWRkIHRoZSBmcmFtZSwgYmVjYXVzZSBzb21ldGhp
bmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCi0gICAgICAgICAgICBKU0NlbGwq
IGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOwotICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYg
dmlzaXRvci0+aW5kZXgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpE
b25lOworICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKSB7CisgICAg
ICAgICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZSAmJiB2aXNpdG9yLT5pbmRleCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyJiBidWlsZGVyID0gbV9idWlsZGVyOwogICAgICAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKQEAgLTI4MSw3ICsyODMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGluZU51bWJlcik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghY2FsbGVlKQorICAgICAgICAgICAgaWYgKCF2
aXNpdG9yLT5jYWxsZWUoKS5yYXdQdHIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOwogCiAgICAgICAgICAgICBtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVD
YXB0dXJlLS07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTQsNiArMTMxNCw4IEBACiAJCTQ3
M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2OTk0OEVERTY4RDQw
NTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjUwRDJEMTFFOERBMDVBMDAyOUE5
MzIgLyogV2FzbVRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi87
IH07CiAJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjUwRDJEMDFFOERBMDVBMDAy
OUE5MzIgLyogV2FzbVRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUyNUMwREQ5MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNUMwREQ3
MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLzsgfTsKKwkJNTI1QzBEREExRTkz
NTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyNUMwREQ4MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2
NzhGOEUxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY4QzFBMDMxMDA5MDA2
QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLzsgfTsKIAkJNTI2NzhGOEYxQTAzMTAw
OTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY5
MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDk4LDYgKzE1MDAsNyBAQAog
CQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVF
IC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OTY1QzIxNjFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUdyYXBoQ29sb3JpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLzsgfTsKIAkJNzk2NUMyMTcxRTVENzk5NjAwQjc1OTFE
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY1QzIxNTFFNUQ3OTk2MDBCNzU5MUQg
LyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTZEQUEyQjFFODlDQ0Q2MDA1REYy
NEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTZGQjQzQTFERkY4
QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBK
U1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xNTI5LDggKzE1MzIsNiBAQAogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2Ft
cGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURBRTI3QTFF
MDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBX
YXNtRXhjZXB0aW9uVHlwZS5oICovOyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyog
SGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3
OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFERUU2NTMy
MDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07Ci0JCTc5RTQyM0UzMURF
RTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmly
b25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCAqLzsg
fTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0
QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAwQ0E2NkFC
IC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBE
RkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0zODE5LDYgKzM4MjAs
OCBAQAogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2JqYy5keWxpYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNo
LW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMu
ZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUyNTBEMkNGMUU4REEwNUEw
MDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21UaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjUw
RDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyNUMwREQ3MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyNjc4RjhDMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2Nr
TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzaWNC
bG9ja0xvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzhGOEQx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYXNpY0Jsb2NrTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTI2NzhGOTAxQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmls
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udHJvbEZsb3dQcm9maWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA0Niw2ICs0MDQ5LDcgQEAKIAkJ
Nzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OTY1QzIxNDFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlHcmFwaENvbG9yaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzk2REFBMkExRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGVlQml0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUhlbHBlcnMu
aDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA3Nyw4ICs0MDgxLDYgQEAKIAkJ
NzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlv
blR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUV4Y2VwdGlvblR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlERkNCREExRDg4QzU5NjAwNTI3
RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNw
cDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxl
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVl
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlRW52aXJv
bm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRTFCNEFGQjg1
MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc0MSw2ICs1
NzQzLDcgQEAKIAkJCQkwRjU1RjBGMTE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAg
Ki8sCiAJCQkJMEY1NUYwRjIxNEQxMDYzNjAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCAqLywKIAkJ
CQlBN0Y4NjkwRTBGOTU4NEExMDA1NTg2OTcgLyogQ2FjaGVkQ2FsbC5oICovLAorCQkJCTc5NkRB
QTJBMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRzLmggKi8sCiAJCQkJMTQyOUQ4REIwRUQy
MjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQyOUQ4REMwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMwMDU1ODY5NyAv
KiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCkBAIC02MzA0LDYgKzYzMDcsOCBAQAogCQkJCTUzRjQw
RTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAogCQkJCUFENEIx
REY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5jcHAgKi8sCiAJCQkJQUQ0QjFERjgx
REYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5kaW5nLmggKi8sCisJCQkJNTI1QzBERDcxRTkzNTg0
NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwICovLAorCQkJCTUyNUMwREQ4MUU5MzU4NDcwMDIx
ODRDRCAvKiBXYXNtQ2FsbGVlLmggKi8sCiAJCQkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8q
IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCiAJCQkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4
N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovLAogCQkJCUFENDEyQjMxMUU3QjJFOEEw
MDhBRjE1NyAvKiBXYXNtQ29udGV4dC5jcHAgKi8sCkBAIC03OTM0LDggKzc5MzksNiBAQAogCQlB
RDJGQ0I4QTFEQjU4NDAwMDBCM0U3MzYgLyoganMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFz
c2VtYmx5Q2FsbGVlLmNwcCAqLywKLQkJCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNX
ZWJBc3NlbWJseUNhbGxlZS5oICovLAogCQkJCTUzODNBQTJGMUU2NUU4QTEwMEE1MzJGQyAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLywKIAkJCQlBRDlFODUyRTFFOEEwQzZFMDA4REUz
OUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKQEAgLTg3MjQsNiAr
ODcyNyw3IEBACiAJCQkJQTVFQTcxMDkxOUY2REU3QzAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNf
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMEExOUY2REU3RTAwOThGNUVDIC8q
IGdlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVF
QTcxMDcxOUY2REU3ODAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252
ZXJzaW9uc19oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQk1MjVDMEREQTFFOTM1ODQ3MDAy
MTg0Q0QgLyogV2FzbUNhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkwREE2N0YxQzhFMzE2
QTAwMjk1MTU5IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBs
ZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkY1MUEwNUM5ODQwMDVDQUI3
NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBp
biBIZWFkZXJzICovLApAQCAtODg2NSw2ICs4ODY5LDcgQEAKIAkJCQk3OUIxNzg4RTFEMzk5Qjgw
MDBCMUE1NjcgLyogSklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QUYw
QkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMTg3QTAyMUJGQkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTc5NkRBQTJCMUU4OUNDRDYwMDVERjI0QSAvKiBDYWxsZWVCaXRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVn
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QzAxQzExMDQxQTAw
MzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtOTAz
MSw3ICs5MDM2LDYgQEAKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAw
MzlEMDY5IC8qIEpTV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMzExREI4M0Q0
OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTc5RTQyM0Uz
MURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDJGQ0JFMzFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2Vi
QXNzZW1ibHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNTFEQjU4REFEMDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTk5
LDcgKzEwNjAzLDYgQEAKIAkJCQlBNzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2NzFBRTMzNUM2
MDAzOUQwNjkgLyogSlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQzMwMURC
ODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTc5
RTQyM0UyMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUFEMkZDQkUyMURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkU0MURCNThEQUQwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFODAy
OTgxRTA4RjFERTAwNThERTc4IC8qIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0xMDcyMiw2ICsxMDcyNSw3IEBACiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNF
N0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFD
MDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1MjVDMEREOTFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1h
dGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lSW50ZXJu
YWwoQwogCiB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX3ZtOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChtX2lz
UGF1c2VkKQpAQCAtNzA2LDExICs3MDYsMTEgQEAgdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRl
ZChDYWxsRnJhbWUqIAogICAgIHBhdXNlTm93IHw9IChtX3BhdXNlT25DYWxsRnJhbWUgPT0gbV9j
dXJyZW50Q2FsbEZyYW1lKTsKIAogICAgIGJvb2wgZGlkUGF1c2VGb3JTdGVwID0gcGF1c2VOb3c7
Ci0gICAgYm9vbCBkaWRIaXRCcmVha3BvaW50ID0gZmFsc2U7CiAKICAgICBCcmVha3BvaW50IGJy
ZWFrcG9pbnQ7Ci0gICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uID0gRGVidWdnZXJDYWxsRnJhbWU6
OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKG1fY3VycmVudENhbGxGcmFtZSk7Ci0gICAgcGF1c2VOb3cg
fD0gZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQoc291cmNlSUQsIHBvc2l0aW9uLCAm
YnJlYWtwb2ludCk7CisgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uID0gRGVidWdnZXJDYWxsRnJh
bWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKHZtLCBtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIGJv
b2wgZGlkSGl0QnJlYWtwb2ludCA9IGhhc0JyZWFrcG9pbnQoc291cmNlSUQsIHBvc2l0aW9uLCAm
YnJlYWtwb2ludCk7CisgICAgcGF1c2VOb3cgfD0gZGlkSGl0QnJlYWtwb2ludDsKICAgICBtX2xh
c3RFeGVjdXRlZExpbmUgPSBwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAgICAgaWYg
KCFwYXVzZU5vdykKICAgICAgICAgcmV0dXJuOwpAQCAtNzIxLDcgKzcyMSw3IEBAIHZvaWQgRGVi
dWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICAvLyByZXNldGluZyB0aGUgcGF1
c2Ugc3RhdGUgYmVmb3JlIGV4ZWN1dGluZyBhbnkgYnJlYWtwb2ludCBhY3Rpb25zLgogICAgIFRl
bXBvcmFyeVBhdXNlZFN0YXRlIHBhdXNlZFN0YXRlKCp0aGlzKTsKIAotICAgIEpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUt
PnZtRW50cnlHbG9iYWxPYmplY3Qodm0pOwogCiAgICAgaWYgKGRpZEhpdEJyZWFrcG9pbnQpIHsK
ICAgICAgICAgaGFuZGxlQnJlYWtwb2ludEhpdCh2bUVudHJ5R2xvYmFsT2JqZWN0LCBicmVha3Bv
aW50KTsKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIERlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9p
bnQoQ2FsbEZyCiBEZWJ1Z2dlckNhbGxGcmFtZSYgRGVidWdnZXI6OmN1cnJlbnREZWJ1Z2dlckNh
bGxGcmFtZSgpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSkKLSAgICAg
ICAgbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWUgPSBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3JlYXRl
KG1fY3VycmVudENhbGxGcmFtZSk7CisgICAgICAgIG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1l
ID0gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShtX3ZtLCBtX2N1cnJlbnRDYWxsRnJhbWUpOwog
ICAgIHJldHVybiAqbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTYgKzYwLDE2IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NvbHVtbjsKIH07CiAKLVJlZjxEZWJ1Z2dl
ckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK1JlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShWTSYg
dm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUg
PT0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lID09IGNhbGxGcmFtZS0+d2FzbUF3YXJlTGV4aWNhbEds
b2JhbE9iamVjdCh2bSktPmdsb2JhbEV4ZWMoKSkpIHsKICAgICAgICAgU2hhZG93Q2hpY2tlbjo6
RnJhbWUgZW1wdHlGcmFtZTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVtcHR5RnJhbWUuaXNU
YWlsRGVsZXRlZCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZy
YW1lKGNhbGxGcmFtZSwgZW1wdHlGcmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEZWJ1Z2dlckNhbGxGcmFtZSh2bSwgY2FsbEZyYW1lLCBlbXB0eUZyYW1lKSk7CiAgICAgfQog
CiAgICAgVmVjdG9yPFNoYWRvd0NoaWNrZW46OkZyYW1lPiBmcmFtZXM7Ci0gICAgY2FsbEZyYW1l
LT52bSgpLnNoYWRvd0NoaWNrZW4oKS5pdGVyYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1l
LCBbJl0gKGNvbnN0IFNoYWRvd0NoaWNrZW46OkZyYW1lJiBmcmFtZSkgLT4gYm9vbCB7CisgICAg
dm0uc2hhZG93Q2hpY2tlbigpLml0ZXJhdGUodm0sIGNhbGxGcmFtZSwgWyZdIChjb25zdCBTaGFk
b3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpIC0+IGJvb2wgewogICAgICAgICBmcmFtZXMuYXBwZW5k
KGZyYW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CkBAIC03OCwyNCArNzgsMjQg
QEAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1Z2dlckNhbGxGcmFtZQogICAgIEFTU0VSVCgh
ZnJhbWVzWzBdLmlzVGFpbERlbGV0ZWQpOyAvLyBUaGUgdG9wIGZyYW1lIHNob3VsZCBuZXZlciBi
ZSB0YWlsIGRlbGV0ZWQuCiAKICAgICBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+IGN1cnJlbnRQ
YXJlbnQgPSBudWxscHRyOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gY2Fs
bEZyYW1lLT53YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KHZtKS0+Z2xvYmFsRXhlYygpOwog
ICAgIC8vIFRoaXMgd2Fsa3MgdGhlIHN0YWNrIGZyb20gdGhlIGVudHJ5IHN0YWNrIGZyYW1lIHRv
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgogICAgIGZvciAodW5zaWduZWQgaSA9IGZyYW1lcy5zaXpl
KCk7IGktLTsgKSB7CiAgICAgICAgIGNvbnN0IFNoYWRvd0NoaWNrZW46OkZyYW1lJiBmcmFtZSA9
IGZyYW1lc1tpXTsKICAgICAgICAgaWYgKCFmcmFtZS5pc1RhaWxEZWxldGVkKQogICAgICAgICAg
ICAgZXhlYyA9IGZyYW1lLmZyYW1lOwotICAgICAgICBSZWY8RGVidWdnZXJDYWxsRnJhbWU+IGN1
cnJlbnRGcmFtZSA9IGFkb3B0UmVmKCpuZXcgRGVidWdnZXJDYWxsRnJhbWUoZXhlYywgZnJhbWUp
KTsKKyAgICAgICAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50RnJhbWUgPSBhZG9wdFJl
ZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKHZtLCBleGVjLCBmcmFtZSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPm1fY2FsbGVyID0gY3VycmVudFBhcmVudDsKICAgICAgICAgY3VycmVudFBhcmVu
dCA9IFdURk1vdmUoY3VycmVudEZyYW1lKTsKICAgICB9CiAgICAgcmV0dXJuICpjdXJyZW50UGFy
ZW50OwogfQogCi1EZWJ1Z2dlckNhbGxGcmFtZTo6RGVidWdnZXJDYWxsRnJhbWUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IFNoYWRvd0NoaWNrZW46OkZyYW1lJiBmcmFtZSkKK0RlYnVnZ2Vy
Q2FsbEZyYW1lOjpEZWJ1Z2dlckNhbGxGcmFtZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYgZnJhbWUpCiAgICAgOiBtX3ZhbGlkTWFjaGlu
ZUZyYW1lKGNhbGxGcmFtZSkKICAgICAsIG1fc2hhZG93Q2hpY2tlbkZyYW1lKGZyYW1lKQogewot
ICAgIG1fcG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb24oKTsKKyAgICBtX3Bvc2l0aW9uID0gY3Vy
cmVudFBvc2l0aW9uKHZtKTsKIH0KIAogUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1Z2dl
ckNhbGxGcmFtZTo6Y2FsbGVyRnJhbWUoKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgRGVidWdn
ZXJDYWxsRnJhbWU6OmludmFsaWRhdGUoKQogICAgIH0KIH0KIAotVGV4dFBvc2l0aW9uIERlYnVn
Z2VyQ2FsbEZyYW1lOjpjdXJyZW50UG9zaXRpb24oKQorVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpjdXJyZW50UG9zaXRpb24oVk0mIHZtKQogewogICAgIGlmICghbV92YWxpZE1hY2hp
bmVGcmFtZSkKICAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbigpOwpAQCAtMjk3LDEzICsyOTcs
MTMgQEAgVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpjdXJyZW50UAogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIHBvc2l0aW9uRm9yQ2FsbEZyYW1lKG1fdmFsaWRNYWNoaW5l
RnJhbWUpOworICAgIHJldHVybiBwb3NpdGlvbkZvckNhbGxGcmFtZSh2bSwgbV92YWxpZE1hY2hp
bmVGcmFtZSk7CiB9CiAKLVRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6cG9zaXRpb25G
b3JDYWxsRnJhbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitUZXh0UG9zaXRpb24gRGVidWdnZXJD
YWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7CiAgICAgTGluZUFuZENvbHVtbkZ1bmN0b3IgZnVuY3RvcjsKLSAgICBjYWxsRnJhbWUt
Pml0ZXJhdGUoZnVuY3Rvcik7CisgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2
bSwgZnVuY3Rvcik7CiAgICAgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQoZnVuY3Rvci5saW5lKCkpLCBPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoZnVuY3Rvci5jb2x1bW4oKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAkocmV2aXNpb24gMjE0ODY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWUgOiBw
dWJsaWMgUmVmQ291bgogcHVibGljOgogICAgIGVudW0gVHlwZSB7IFByb2dyYW1UeXBlLCBGdW5j
dGlvblR5cGUgfTsKIAotICAgIHN0YXRpYyBSZWY8RGVidWdnZXJDYWxsRnJhbWU+IGNyZWF0ZShD
YWxsRnJhbWUqKTsKKyAgICBzdGF0aWMgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjcmVhdGUoVk0m
LCBDYWxsRnJhbWUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxEZWJ1Z2dlckNh
bGxGcmFtZT4gY2FsbGVyRnJhbWUoKTsKICAgICBFeGVjU3RhdGUqIGdsb2JhbEV4ZWMoKTsKQEAg
LTY5LDE0ICs2OSwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgb25seSBw
dWJsaWMgZm9yIHRoZSBEZWJ1Z2dlcidzIHVzZSBvbmx5LiBUaGV5IHdpbGwgYmUKICAgICAvLyBt
YWRlIHByaXZhdGUgc29vbi4gT3RoZXIgY2xpZW50cyBzaG91bGQgbm90IHVzZSB0aGVzZS4KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24oKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGV4dFBvc2l0aW9uIHBvc2l0aW9uRm9yQ2FsbEZy
YW1lKENhbGxGcmFtZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQb3NpdGlvbiBjdXJy
ZW50UG9zaXRpb24oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGV4dFBvc2l0
aW9uIHBvc2l0aW9uRm9yQ2FsbEZyYW1lKFZNJiwgQ2FsbEZyYW1lKik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFNvdXJjZUlEIHNvdXJjZUlERm9yQ2FsbEZyYW1lKENhbGxGcmFtZSop
OwogCiAgICAgYm9vbCBpc1RhaWxEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dDaGlj
a2VuRnJhbWUuaXNUYWlsRGVsZXRlZDsgfQogCiBwcml2YXRlOgotICAgIERlYnVnZ2VyQ2FsbEZy
YW1lKENhbGxGcmFtZSosIGNvbnN0IFNoYWRvd0NoaWNrZW46OkZyYW1lJik7CisgICAgRGVidWdn
ZXJDYWxsRnJhbWUoVk0mLCBDYWxsRnJhbWUqLCBjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFtZSYp
OwogCiAgICAgQ2FsbEZyYW1lKiBtX3ZhbGlkTWFjaGluZUZyYW1lOwogICAgIFJlZlB0cjxEZWJ1
Z2dlckNhbGxGcmFtZT4gbV9jYWxsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJXYXNtQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTE4NSw3ICsxODYsOCBAQCBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1l
SW50ZXJuYWwoCiAKIEpTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6OnZtRW50cnlHbG9iYWxPYmpl
Y3QoKQogewotICAgIGlmIChjYWxsZWUoKS0+aXNPYmplY3QoKSkgeyAKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgaWYgKGNhbGxlZSgpLmFzQ2VsbCgpLT5pc09i
amVjdCgpKSB7IAogICAgICAgICBpZiAodGhpcyA9PSBsZXhpY2FsR2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSkKICAgICAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAg
ICAgfQpAQCAtMTk3LDYgKzE5OSwzOSBAQCBKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2bUVu
dHJ5R2xvYmFsCiAgICAgcmV0dXJuIHZtKCkuZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiB9
CiAKK0pTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6OnZtRW50cnlHbG9iYWxPYmplY3QoVk0mIHZt
KQoreworICAgIGlmIChjYWxsZWUoKS5pc0NlbGwoKSAmJiBjYWxsZWUoKS5hc0NlbGwoKS0+aXNP
YmplY3QoKSkgeworICAgICAgICBpZiAodGhpcyA9PSBsZXhpY2FsR2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSkKKyAgICAgICAgICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgfQorCisgICAgLy8gRm9yIGFueSBFeGVjU3RhdGUgdGhhdCdzIG5vdCBhIGdsb2JhbEV4ZWMs
IHRoZSAKKyAgICAvLyBkeW5hbWljIGdsb2JhbCBvYmplY3QgbXVzdCBiZSBzZXQgc2luY2UgY29k
ZSBpcyBydW5uaW5nCisgICAgQVNTRVJUKHZtLmVudHJ5U2NvcGUpOworICAgIHJldHVybiB2bS5l
bnRyeVNjb3BlLT5nbG9iYWxPYmplY3QoKTsKK30KKworSlNHbG9iYWxPYmplY3QqIENhbGxGcmFt
ZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdChWTSYgdm0pCit7CisgICAgaWYgKCFjYWxs
ZWUoKS5pc1dhc20oKSkKKyAgICAgICAgcmV0dXJuIGxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAg
ICByZXR1cm4gV2FzbTo6bG9hZENvbnRleHQodm0pLT5nbG9iYWxPYmplY3QoKTsKK30KKworYm9v
bCBDYWxsRnJhbWU6OmlzQW55V2FzbUNhbGxlZSgpCit7CisgICAgQ2FsbGVlQml0cyBjYWxsZWUg
PSB0aGlzLT5jYWxsZWUoKTsKKyAgICBpZiAoY2FsbGVlLmlzV2FzbSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEFTU0VSVChjYWxsZWUuaXNDZWxsKCkpOworICAgIGlmICghIWNhbGxl
ZS5yYXdQdHIoKSAmJiBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZWUuYXNDZWxsKCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogQ2FsbEZyYW1l
KiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomIGN1cnJWTUVudHJ5RnJhbWUp
CiB7CiAgICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJyVk1FbnRyeUZy
YW1lKSB7CkBAIC0yMTksOSArMjU0LDExIEBAIFNVUFBSRVNTX0FTQU4gQ2FsbEZyYW1lKiBDYWxs
RnJhbWU6OnVuc2EKIAogU291cmNlT3JpZ2luIENhbGxGcmFtZTo6Y2FsbGVyU291cmNlT3JpZ2lu
KCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgVk0qIHZt
ID0gJnRoaXMtPnZtKCk7CiAgICAgU291cmNlT3JpZ2luIHNvdXJjZU9yaWdpbjsKICAgICBib29s
IGhhdmVTa2lwcGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQo
dGhpcywgWyZdKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgeworICAgIFN0YWNrVmlzaXRvcjo6dmlz
aXQodGhpcywgdm0sIFsmXShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgaWYgKCFz
dGQ6OmV4Y2hhbmdlKGhhdmVTa2lwcGVkRmlyc3RGcmFtZSwgdHJ1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RhY2tWaXNpdG9yOjpTdGF0dXM6OkNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMTQ4NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWJz
dHJhY3RQQy5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlz
aXRvci5oIgpAQCAtODYsMTAgKzg3LDE4IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7CiAKLSAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUo
KTsgfQotICAgICAgICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0Nh
bGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxsKiBjYWxsZWUo
KSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5ib3hlZENlbGwo
KTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIEpTVmFsdWUgdW5zYWZlQ2FsbGVlKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVKU1ZhbHVlKCk7
IH0KKyAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgICAgICAgICByZXR1cm4g
dGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAg
ICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzW0NhbGxGcmFt
ZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgQ2FsbGVlQml0cyBj
YWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVlQml0cyB1bnNh
ZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlXS5wb2ludGVyKCkpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lzdGVyOjpjb2Rl
QmxvY2soKTsgfQogICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spOyB9CiAgICAgICAgIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVD
b2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9ja10u
UmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsgfQpAQCAtOTgsOSArMTA3LDE1IEBAIG5h
bWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIEFTU0VSVCh0aGlzW3Njb3BlUmVnaXN0ZXJPZmZz
ZXRdLlJlZ2lzdGVyOjpzY29wZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzW3Njb3BlUmVn
aXN0ZXJPZmZzZXRdLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgICAgICB9Ci0KICAgICAgICAgLy8g
R2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCisgICAgICAgIC8vIFRoaXMg
dmFyaWFudCBpcyBub3Qgc2FmZSB0byBjYWxsIGZyb20gYSBXYXNtIGZyYW1lLgogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCgpOwor
ICAgICAgICAvLyBUaGlzIHZhcmlhbnQgaXMgc2FmZSB0byBjYWxsIGZyb20gYSBXYXNtIGZyYW1l
LgorICAgICAgICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdChWTSYpOworCisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiB3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KFZNJik7
CisKKyAgICAgICAgYm9vbCBpc0FueVdhc21DYWxsZWUoKTsKIAogICAgICAgICAvLyBHbG9iYWwg
b2JqZWN0IGluIHdoaWNoIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2FzIGRlZmluZWQu
CiAgICAgICAgIC8vIERpZmZlcnMgZnJvbSB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgZHVyaW5nIGZ1
bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCkBAIC0yNTcsOSArMjcyLDE3
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVz
IG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJikgY29uc3Q7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyBpbXByb3Blci4gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdlIGNhbiBjYWxs
IGl0IHdpdGggYSBudWxsCiAgICAgICAgIC8vIHJlY2VpdmVyLiBXZSBzaG91bGQgYWx3YXlzIGJl
IHVzaW5nIFN0YWNrVmlzaXRvciBkaXJlY3RseS4KKyAgICAgICAgLy8gSXQncyBvbmx5IHZhbGlk
IHRvIGNhbGwgdGhpcyBmcm9tIGEgbm9uLXdhc20gdG9wIGZyYW1lLgogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVuY3Rvcj4odGhp
cywgZnVuY3Rvcik7CisgICAgICAgICAgICBWTSogdm07CisgICAgICAgICAgICB2b2lkKiByYXdU
aGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICghIXJhd1RoaXMpIHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgdm0g
PSAmdGhpcy0+dm0oKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHZtID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVuY3Rvcj4odGhpcywg
dm0sIGZ1bmN0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVC
aXRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxlZUJpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2Ug
V2FzbSB7CitjbGFzcyBDYWxsZWU7Cit9CisKK2NsYXNzIEpTQ2VsbDsKKworY2xhc3MgQ2FsbGVl
Qml0cyB7CitwdWJsaWM6CisgICAgQ2FsbGVlQml0cygpID0gZGVmYXVsdDsKKyAgICBDYWxsZWVC
aXRzKHZvaWQqIHB0cikgOiBtX3B0cihwdHIpIHsgfSAKKworICAgIENhbGxlZUJpdHMmIG9wZXJh
dG9yPShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBtX3B0ciA9IGNlbGw7CisgICAgICAg
IEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBi
b29sIGlzV2FzbSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRy
KSAmIDE7IH0KKyAgICBib29sIGlzQ2VsbCgpIGNvbnN0IHsgcmV0dXJuICFpc1dhc20oKTsgfQor
CisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIGFzQ2VsbCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzV2FzbSgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTQ2VsbCo+
KG1fcHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIFdhc206OkNhbGxlZSogYXNXYXNt
Q2FsbGVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1dhc20oKSk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8V2FzbTo6Q2FsbGVlKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obV9wdHIpICYgfjEpOworICAgIH0KKworICAgIHZvaWQqIHJhd1B0cigpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQqIG1fcHRyIHsgbnVsbHB0ciB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3MiwxNCArNDcyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJlKSB7Ci0gICAgICAgICAg
ICBpZiAoIXZpc2l0b3ItPmlzV2FzbUZyYW1lKCkKLSAgICAgICAgICAgICAgICAmJiAhIXZpc2l0
b3ItPmNvZGVCbG9jaygpCi0gICAgICAgICAgICAgICAgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygp
LT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CisgICAgICAgICAg
ICBpZiAodmlzaXRvci0+aXNXYXNtRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHMu
YXBwZW5kKFN0YWNrRnJhbWU6Ondhc20oKSk7CisgICAgICAgICAgICBlbHNlIGlmICghIXZpc2l0
b3ItPmNvZGVCbG9jaygpICYmICF2aXNpdG9yLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxv
Y2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5h
cHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2Fs
bGVlKCksIHZpc2l0b3ItPmNvZGVCbG9jaygpLCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2FsbGVlKCku
YXNDZWxsKCksIHZpc2l0b3ItPmNvZGVCbG9jaygpLCB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgp
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fcmVzdWx0cy5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgIHZpc2l0b3ItPmNhbGxl
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrRnJhbWUobV92bSwgdmlzaXRvci0+Y2Fs
bGVlKCkuYXNDZWxsKCkpKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIG1fcmVt
YWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1cmUtLTsKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lk
IEludGVycHJldGVyOjpnZXRTdGFja1RyYWNlKFZlY3RvcjxTCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHNpemVfdCBmcmFtZXNDb3VudCA9IDA7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKFsmXSAo
U3RhY2tWaXNpdG9yJikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgeworICAgIFN0YWNrVmlzaXRv
cjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJikgLT4gU3RhY2tWaXNp
dG9yOjpTdGF0dXMgewogICAgICAgICBmcmFtZXNDb3VudCsrOwogICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpDb250aW51ZTsKICAgICB9KTsKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIElu
dGVycHJldGVyOjpnZXRTdGFja1RyYWNlKFZlY3RvcjxTCiAgICAgZnJhbWVzQ291bnQgPSBzdGQ6
Om1pbihtYXhTdGFja1NpemUsIGZyYW1lc0NvdW50KTsKIAogICAgIEdldFN0YWNrVHJhY2VGdW5j
dG9yIGZ1bmN0b3Iodm0sIHJlc3VsdHMsIGZyYW1lc1RvU2tpcCwgZnJhbWVzQ291bnQpOwotICAg
IGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNh
bGxGcmFtZSwgJnZtLCBmdW5jdG9yKTsKICAgICBBU1NFUlQocmVzdWx0cy5zaXplKCkgPT0gcmVz
dWx0cy5jYXBhY2l0eSgpKTsKIH0KIApAQCAtNTc1LDEzICs1NzUsMTMgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIEhhbmRsZXJJbmZvKiBtX2hhbmRsZXI7CiB9OwogCi1BTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZt
KCk7CiAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAg
aWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlcigpKSB7CisgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+
dm1FbnRyeUdsb2JhbE9iamVjdCh2bSktPmRlYnVnZ2VyKCkpIHsKICAgICAgICAgU3VzcGVuZEV4
Y2VwdGlvblNjb3BlIHNjb3BlKCZ2bSk7Ci0gICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVu
Y3Rpb24qPih2bSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKSkKKyAgICAgICAgaWYgKGNhbGxGcmFt
ZS0+aXNBbnlXYXNtQ2FsbGVlKCkKKyAgICAgICAgICAgIHx8IChjYWxsRnJhbWUtPmNhbGxlZSgp
LmlzQ2VsbCgpICYmIGNhbGxGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCktPmluaGVyaXRzKHZtLCBK
U0Z1bmN0aW9uOjppbmZvKCkpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT51bndpbmRFdmVudChj
YWxsRnJhbWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkRXhlY3V0
ZVByb2dyYW0oY2FsbEZyYW1lKTsKQEAgLTU5MSw4ICs1OTEsOSBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyCiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGlj
OgotICAgIFVud2luZEZ1bmN0b3IoQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWlu
YXRpb24sIENvZGVCbG9jayomIGNvZGVCbG9jaywgSGFuZGxlckluZm8qJiBoYW5kbGVyKQotICAg
ICAgICA6IG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKKyAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwg
Q2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBib29sIGlzVGVybWluYXRpb24sIENvZGVCbG9jayomIGNv
ZGVCbG9jaywgSGFuZGxlckluZm8qJiBoYW5kbGVyKQorICAgICAgICA6IG1fdm0odm0pCisgICAg
ICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAgICAsIG1faXNUZXJtaW5hdGlvbihp
c1Rlcm1pbmF0aW9uKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAg
LCBtX2hhbmRsZXIoaGFuZGxlcikKQEAgLTYxNCw3ICs2MTUsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKG1f
Y2FsbEZyYW1lKTsKKyAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2Nh
bGxGcmFtZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2aXNpdG9yKTsKIApAQCAtNjM0LDEzICs2MzUsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKCFjdXJyZW50Q2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgVk0mIHZtID0gbV9jYWxsRnJhbWUtPnZtKCk7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIGludHB0cl90KiBmcmFtZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpOwogCiAgICAgICAg
IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPnNpemUoKTsKLSAg
ICAgICAgVk1FbnRyeVJlY29yZCogcmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BWTUVudHJ5
RnJhbWUpOworICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVjb3JkKG1f
dm0udG9wVk1FbnRyeUZyYW1lKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Z2lzdGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBjdXJyZW50
RW50cnkgPSBjdXJyZW50Q2FsbGVlU2F2ZXMtPmF0KGkpOwogICAgICAgICAgICAgaWYgKGRvbnRD
b3B5UmVnaXN0ZXJzLmdldChjdXJyZW50RW50cnkucmVnKCkpKQpAQCAtNjU0LDYgKzY1NCw3IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAKKyAgICBWTSYgbV92bTsKICAgICBDYWxsRnJhbWUq
JiBtX2NhbGxGcmFtZTsKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sq
JiBtX2NvZGVCbG9jazsKQEAgLTY4NiwxOCArNjg3LDE3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogSW50ZXJwcmV0ZXI6OnUKIAogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFu
ZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCiAgICAgSGFuZGxl
ckluZm8qIGhhbmRsZXIgPSBudWxscHRyOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3RvcihjYWxs
RnJhbWUsIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSwgY29k
ZUJsb2NrLCBoYW5kbGVyKTsKLSAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAg
VW53aW5kRnVuY3RvciBmdW5jdG9yKHZtLCBjYWxsRnJhbWUsIGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSwgY29kZUJsb2NrLCBoYW5kbGVyKTsKKyAgICBTdGFj
a1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCBmdW5jdG9yKTsKICAgICBpZiAoIWhhbmRs
ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAK
LXZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3ZvaWQgSW50ZXJwcmV0
ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiB2bSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9IGNhbGxG
cmFtZS0+dm0oKTsKLSAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlH
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxs
RnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3Qodm0pLT5kZWJ1Z2dlcigpOwogICAgIGlmIChkZWJ1
Z2dlciAmJiBkZWJ1Z2dlci0+bmVlZHNFeGNlcHRpb25DYWxsYmFja3MoKSAmJiAhZXhjZXB0aW9u
LT5kaWROb3RpZnlJbnNwZWN0b3JPZlRocm93KCkpIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGFz
c3VtZXMgdGhhdCBpZiB0aGUgZGVidWdnZXIgaXMgZW5hYmxlZCB0aGVuIHRoZXJlIGlzIG5vIGlu
bGluaW5nLgogICAgICAgICAvLyBJZiB0aGF0IGFzc3VtcHRpb24gdHVybnMgb3V0IHRvIGJlIGZh
bHNlIHRoZW4gd2UnbGwgaWdub3JlIHRoZSBpbmxpbmVkIGNhbGwKQEAgLTcxMCw3ICs3MTAsNyBA
QCB2b2lkIEludGVycHJldGVyOjpub3RpZnlEZWJ1Z2dlck9mRXhjZXB0CiAgICAgICAgICAgICBo
YXNDYXRjaEhhbmRsZXIgPSBmYWxzZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBHZXRD
YXRjaEhhbmRsZXJGdW5jdG9yIGZ1bmN0b3I7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPml0ZXJh
dGUoZnVuY3Rvcik7CisgICAgICAgICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwg
JnZtLCBmdW5jdG9yKTsKICAgICAgICAgICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gZnVuY3Rv
ci5oYW5kbGVyKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWhhbmRsZXIgfHwgaGFuZGxlci0+aXND
YXRjaEhhbmRsZXIoKSk7CiAgICAgICAgICAgICBoYXNDYXRjaEhhbmRsZXIgPSAhIWhhbmRsZXI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBnZXRBcmd1bWVudHNEYXRhKENhbGxGcmFtZSosIEpT
RnVuY3Rpb24qJiwgcHRyZGlmZl90JiBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciomIGFy
Z3YsIGludCYgYXJnYyk7CiAgICAgICAgIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qLCBVbndpbmRTdGFydCk7Ci0g
ICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oQ2FsbEZyYW1l
KiwgRXhjZXB0aW9uKik7CisgICAgICAgIHZvaWQgbm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRv
QmVUaHJvd24oVk0mLCBDYWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVWRVJfSU5M
SU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAgIHN0YXRp
YyBKU1N0cmluZyogc3RhY2tUcmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNrRnJh
bWU+Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgaW50MzJfdCYgcGF5bG9hZCgpOwogICAgICAgICBpbnQzMl90JiB0
YWcoKTsKIAorICAgICAgICB2b2lkKiBwb2ludGVyKCkgY29uc3Q7CisKICAgICAgICAgc3RhdGlj
IFJlZ2lzdGVyIHdpdGhJbnQoaW50MzJfdCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdp
c3RlciByID0ganNOdW1iZXIoaSk7CkBAIC0xOTUsNiArMTk3LDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2VuZGlmCiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkKiBSZWdpc3Rlcjo6cG9p
bnRlcigpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiB1
LmVuY29kZWRWYWx1ZS5wdHI7CisjZWxzZQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZv
aWQqPihwYXlsb2FkKCkpOworI2VuZGlmCisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSBpbnQz
Ml90IFJlZ2lzdGVyOjpwYXlsb2FkKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB1LmVu
Y29kZWRWYWx1ZS5hc0JpdHMucGF5bG9hZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDIxNDg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBk
YXRlKFZNJiB2bSwgRXhlY1MKICAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAg
IFZlY3RvcjxGcmFtZT4gc3RhY2tSaWdodE5vdzsKICAgICAgICAgU3RhY2tWaXNpdG9yOjp2aXNp
dCgKLSAgICAgICAgICAgIGV4ZWMsIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyB7CisgICAgICAgICAgICBleGVjLCAmdm0sIFsmXSAoU3RhY2tWaXNp
dG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAgICAgICAgICAgICAgICAg
aWYgKHZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5p
c1dhc21GcmFtZSgpKSB7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1
cGRhdGUoVk0mIHZtLCBFeGVjUwogICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsRGVsZXRlZCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHNoYWRvdyBjaGlja2VuIHdv
cmsgd2l0aCBXYXNtLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU0NDEKLSAgICAgICAgICAgICAgICBzdGFja1JpZ2h0Tm93LmFw
cGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSksIHZpc2l0b3It
PmNhbGxGcmFtZSgpLCBpc1RhaWxEZWxldGVkKSk7CisgICAgICAgICAgICAgICAgc3RhY2tSaWdo
dE5vdy5hcHBlbmQoRnJhbWUoanNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXND
ZWxsKCkpLCB2aXNpdG9yLT5jYWxsRnJhbWUoKSwgaXNUYWlsRGVsZXRlZCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIHN0YWNrUmlnaHROb3cucmV2ZXJzZSgpOwpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQg
U2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MKICAgICAKICAgICBWZWN0b3I8RnJh
bWU+IHRvUHVzaDsKICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KAotICAgICAgICBleGVjLCBbJl0g
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgeworICAgICAg
ICBleGVjLCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6
OlN0YXR1cyB7CiAgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNJbmxpbmVkRnJhbWUoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgaW5saW5pbmcuCiAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4NgpAQCAt
MzA2LDcgKzMwNiw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgRXhlY1MK
ICAgICAgICAgICAgICAgICBpZiAoc2NvcGUpCiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNjb3BlLT5pbmhlcml0cyh2bSwgSlNTY29wZTo6aW5mbygpKSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0b1B1c2guYXBwZW5kKEZyYW1lKGpzQ2FzdDxKU09iamVjdCo+KHZp
c2l0b3ItPmNhbGxlZSgpKSwgY2FsbEZyYW1lLCBpc1RhaWxEZWxldGVkLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKSkp
OworICAgICAgICAgICAgdG9QdXNoLmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNp
dG9yLT5jYWxsZWUoKS5hc0NlbGwoKSksIGNhbGxGcmFtZSwgaXNUYWlsRGVsZXRlZCwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSwgc2NvcGUsIGNvZGVCbG9jaywgY2FsbEZyYW1lLT5jYWxsU2l0ZUlu
ZGV4KCkpKTsKIAogICAgICAgICAgICAgaWYgKGluZGV4SW5Mb2cgPCBsb2dDdXJzb3JJbmRleAog
ICAgICAgICAgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIHByb3RlY3RzIHVzIGZyb20gdGhlIGNh
c2Ugd2hlcmUgYWR2YW5jZUluZGV4SW5Mb2dUbyBkaWRuJ3QgZmluZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW5JbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW5Jbmxp
bmVzLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgU2hh
ZG93Q2hpY2tlbjo6aXRlcmF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKIHsKLSAgICBEZWZlckdDIGRlZmVyR0MoZXhlYy0+dm0oKS5oZWFwKTsKKyAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAKICAgICB1cGRhdGUodm0sIGV4ZWMpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOSArMzEs
MjAgQEAKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0YWNrVmlzaXRvcjo6U3RhY2tWaXNp
dG9yKENhbGxGcmFtZSogc3RhcnRGcmFtZSkKK1N0YWNrVmlzaXRvcjo6U3RhY2tWaXNpdG9yKENh
bGxGcmFtZSogc3RhcnRGcmFtZSwgVk0qIHZtKQogewogICAgIG1fZnJhbWUubV9pbmRleCA9IDA7
CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAgICAgQ2FsbEZyYW1lKiB0b3BG
cmFtZTsKICAgICBpZiAoc3RhcnRGcmFtZSkgewotICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZy
YW1lID0gc3RhcnRGcmFtZS0+dm0oKS50b3BWTUVudHJ5RnJhbWU7Ci0gICAgICAgIHRvcEZyYW1l
ID0gc3RhcnRGcmFtZS0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgICAgIEFTU0VSVCh2bSk7Cisg
ICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSB2bS0+dG9wVk1FbnRyeUZyYW1lOworICAg
ICAgICB0b3BGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgICAgIAogICAgICAgICBpZiAo
dG9wRnJhbWUgJiYgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fZnJhbWUubV9WTUVudHJ5RnJhbWUpID09
IHN0YXRpY19jYXN0PHZvaWQqPih0b3BGcmFtZSkpIHsKICAgICAgICAgICAgIHRvcEZyYW1lID0g
dm1FbnRyeVJlY29yZChtX2ZyYW1lLm1fVk1FbnRyeUZyYW1lKS0+bV9wcmV2VG9wQ2FsbEZyYW1l
OwpAQCAtMTAzLDcgKzEwNCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkRnJhbWUoQ2FsbEZy
YW1lKiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChjYWxsRnJhbWUtPmNhbGxl
ZSgpLT5pc0FueVdhc21DYWxsZWUoY2FsbEZyYW1lLT52bSgpKSkgeworICAgIGlmIChjYWxsRnJh
bWUtPmlzQW55V2FzbUNhbGxlZSgpKSB7CiAgICAgICAgIHJlYWROb25JbmxpbmVkRnJhbWUoY2Fs
bEZyYW1lKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NSwxMCArMTU2LDEwIEBAIHZv
aWQgU3RhY2tWaXNpdG9yOjpyZWFkTm9uSW5saW5lZEZyYW1lKEMKICAgICBtX2ZyYW1lLm1fY2Fs
bGVySXNWTUVudHJ5RnJhbWUgPSBtX2ZyYW1lLm1fQ2FsbGVyVk1FbnRyeUZyYW1lICE9IG1fZnJh
bWUubV9WTUVudHJ5RnJhbWU7CiAgICAgbV9mcmFtZS5tX2lzV2FzbUZyYW1lID0gZmFsc2U7CiAK
LSAgICBKU0NlbGwqIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CisgICAgQ2FsbGVlQml0
cyBjYWxsZWUgPSBjYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIG1fZnJhbWUubV9jYWxsZWUgPSBj
YWxsZWU7CiAKLSAgICBpZiAoY2FsbGVlLT5pc0FueVdhc21DYWxsZWUoKmNhbGxlZS0+dm0oKSkp
IHsKKyAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21DYWxsZWUoKSkgewogICAgICAgICBtX2Zy
YW1lLm1faXNXYXNtRnJhbWUgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lLm1fY29kZUJsb2NrID0g
bnVsbHB0cjsKICAgICAgICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gMDsKQEAgLTIwNCw3
ICsyMDUsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZElubGluZWRGcmFtZShDYWxsCiAKICAg
ICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVGb3JDYWxs
RnJhbWUoY2FsbEZyYW1lKTsKICAgICAgICAgbV9mcmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKLSAg
ICAgICAgQVNTRVJUKG1fZnJhbWUuY2FsbGVlKCkpOworICAgICAgICBBU1NFUlQoISFtX2ZyYW1l
LmNhbGxlZSgpLnJhd1B0cigpKTsKIAogICAgICAgICAvLyBUaGUgY2FsbGVyRnJhbWUganVzdCBu
ZWVkcyB0byBiZSBub24tbnVsbCB0byBpbmRpY2F0ZSB0aGF0IHdlCiAgICAgICAgIC8vIGhhdmVu
J3QgcmVhY2hlZCB0aGUgbGFzdCBmcmFtZSB5ZXQuIFNldHRpbmcgaXQgdG8gdGhlIHJvb3QKQEAg
LTI1NCwxNCArMjU1LDEyIEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3I6OkZy
YW0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoaXNXYXNtRnJhbWUoKSkgewot
ICAgICAgICBpZiAoSlNDZWxsKiBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKSkgewotICAgICAgICAg
ICAgaWYgKEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpT
V2ViQXNzZW1ibHlDYWxsZWUqPigqY2FsbGVlLT52bSgpLCBjYWxsZWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB3YXNtQ2FsbGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAg
ICAvLyBPdGhlciB3YXNtIGNhbGxlZXMgKGUuZywgc3R1YnMpIGRvbid0IHVzZSBjYWxsZWUgc2F2
ZSByZWdpc3RlcnMsIHNvIG5vdGhpbmcgbmVlZHMKLSAgICAgICAgICAgIC8vIHRvIGJlIHJlc3Rv
cmVkIGZvciB0aGVtLgorICAgICAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlZSgpLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxs
ZWUoKS5hc1dhc21DYWxsZWUoKTsKKyAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCkBA
IC0yNzYsNyArMjc1LDYgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcjo6RnJh
bQogU3RyaW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CiB7CiAg
ICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgp
OwogCiAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBDb2RlVHlwZTo6V2FzbToK
QEAgLTI4OCwxMiArMjg2LDE0IEBAIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1lOjpmdW5jdGlv
bk5hbWUKICAgICBjYXNlIENvZGVUeXBlOjpNb2R1bGU6CiAgICAgICAgIHRyYWNlTGluZSA9IEFT
Q0lJTGl0ZXJhbCgibW9kdWxlIGNvZGUiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2Rl
VHlwZTo6TmF0aXZlOgorICAgIGNhc2UgQ29kZVR5cGU6Ok5hdGl2ZTogeworICAgICAgICBKU0Nl
bGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpOwogICAgICAgICBpZiAoY2FsbGVl
KQogICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxG
cmFtZSgpLT52bSgpLCBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsZWUpKS5pbXBsKCk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29kZVR5cGU6OkZ1bmN0aW9uOgotICAgICAgICB0cmFjZUxpbmUg
PSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09i
amVjdCo+KGNhbGxlZSkpLmltcGwoKTsKKyAgICB9CisgICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rp
b246IAorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZy
YW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KHRoaXMtPmNhbGxlZSgpLmFzQ2VsbCgpKSku
aW1wbCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVUeXBlOjpHbG9iYWw6CiAgICAg
ICAgIHRyYWNlTGluZSA9IEFTQ0lJTGl0ZXJhbCgiZ2xvYmFsIGNvZGUiKTsKQEAgLTQ1NSw3ICs0
NTUsNyBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXAoUHJpbnRTdHJlCiAgICAgICAg
ICAgICBvdXQucHJpbnQoaW5kZW50LCAiSW5saW5lQ2FsbEZyYW1lOiAiLCBSYXdQb2ludGVyKG1f
aW5saW5lQ2FsbEZyYW1lKSwgIlxuIik7CiAjZW5kaWYKIAotICAgICAgICBvdXQucHJpbnQoaW5k
ZW50LCAiY2FsbGVlOiAiLCBSYXdQb2ludGVyKGNhbGxlZSgpKSwgIlxuIik7CisgICAgICAgIG91
dC5wcmludChpbmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCkucmF3UHRyKCkp
LCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50KGluZGVudCwgInJldHVyblBDOiAiLCBSYXdQb2lu
dGVyKHJldHVyblBDKSwgIlxuIik7CiAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZXJG
cmFtZTogIiwgUmF3UG9pbnRlcihjYWxsZXJGcmFtZSksICJcbiIpOwogICAgICAgICB1bnNpZ25l
ZCBsb2NhdGlvblJhd0JpdHMgPSBjYWxsRnJhbWUtPmNhbGxTaXRlQXNSYXdCaXRzKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5o
CShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJDYWxsZWVCaXRzLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29y
ZC5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0luZGVudGVyLmg+CkBA
IC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsg
fQogICAgICAgICBib29sIGNhbGxlcklzVk1FbnRyeUZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZXJJc1ZNRW50cnlGcmFtZTsgfQogICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsZXJGcmFtZTsgfQotICAgICAgICBKU0NlbGwqIGNhbGxlZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9CisgICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKSBjb25zdCB7CkBAIC0xMTAsNyArMTExLDcg
QEAgcHVibGljOgogICAgICAgICBWTUVudHJ5RnJhbWUqIG1fVk1FbnRyeUZyYW1lOwogICAgICAg
ICBWTUVudHJ5RnJhbWUqIG1fQ2FsbGVyVk1FbnRyeUZyYW1lOwogICAgICAgICBDYWxsRnJhbWUq
IG1fY2FsbGVyRnJhbWU7Ci0gICAgICAgIEpTQ2VsbCogbV9jYWxsZWU7CisgICAgICAgIENhbGxl
ZUJpdHMgbV9jYWxsZWU7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgICAg
IHNpemVfdCBtX2luZGV4OwogICAgICAgICBzaXplX3QgbV9hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpczsKQEAgLTEzMCw5ICsxMzEsOSBAQCBwdWJsaWM6CiAgICAgLy8gICAgIFN0YXR1cyBvcGVy
YXRvcigpKFN0YWNrVmlzaXRvciYpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgdmlzaXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHN0YXRpYyB2b2lkIHZpc2l0KENhbGxGcmFtZSogc3Rh
cnRGcmFtZSwgVk0qIHZtLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAg
U3RhY2tWaXNpdG9yIHZpc2l0b3Ioc3RhcnRGcmFtZSk7CisgICAgICAgIFN0YWNrVmlzaXRvciB2
aXNpdG9yKHN0YXJ0RnJhbWUsIHZtKTsKICAgICAgICAgd2hpbGUgKHZpc2l0b3ItPmNhbGxGcmFt
ZSgpKSB7CiAgICAgICAgICAgICBTdGF0dXMgc3RhdHVzID0gZnVuY3Rvcih2aXNpdG9yKTsKICAg
ICAgICAgICAgIGlmIChzdGF0dXMgIT0gQ29udGludWUpCkBAIC0xNDYsNyArMTQ3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgdW53aW5kVG9NYWNoaW5lQ29kZUJsb2NrRnJhbWUoKTsKIAogcHJpdmF0
ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZy
YW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFy
dEZyYW1lLCBWTSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnb3RvTmV4dEZyYW1l
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24g
MjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTk1LDExICs1OTUsMTUgQEAgdm9pZCBsaW5rRm9yKAogICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhl
Yy0+Y2FsbGVyRnJhbWUoKTsKKyAgICAvLyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9y
IGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKKyAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJl
IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCku
aXNDZWxsKCkpOworCiAgICAgVk0mIHZtID0gY2FsbGVyRnJhbWUtPnZtKCk7CiAgICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICAv
LyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgot
ICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpIDogY2Fs
bGVyQ29kZUJsb2NrOworICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5VG9KU0NhbGxl
ZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxs
ZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwogICAgIEFTU0VS
VChvd25lcik7CiAKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKQEAgLTcx
NywxMiArNzIxLDE3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICB9CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKKworICAgIC8vIE91
ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwor
ICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisg
ICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKICAgICBWTSYgdm0g
PSBjYWxsZXJGcmFtZS0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNh
bGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFz
c2VtYmx5VG9KU0NhbGxlZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpOworICAgIGJvb2wgaXNXZWJB
c3NlbWJseSA9IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5h
c0NlbGwoKSk7CiAKICAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEg
dmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2Vi
QXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkpIDogY2FsbGVyQ29kZUJsb2NrOwor
ICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxs
ZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwogICAgIEFTU0VS
VChvd25lcik7CiAKICAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcg
KzE3OCw3IEBAIGJvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQoRXgKIAogICAg
ICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQpIHsKICAgICAgICAgICAgIEZpbmRGaXJzdENhbGxlckZy
YW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKLSAgICAgICAgICAgIHZtLnRv
cENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6
dmlzaXQodm0udG9wQ2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgICAgICAgICAgY2FsbEZy
YW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwogICAgICAgICAgICAgdW5zaWduZWQgc3Rh
Y2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKICAgICAgICAgICAgICpieXRlY29kZU9mZnNldCA9
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3Rh
bmNlLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw4ICsxNTYsMTAgQEAg
dm9pZCBFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihFeGVjUwogICAgIGJvb2wgaGFzVHJh
Y2UgPSBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChleGVjLCB2bSwgdGhpcywgdXNl
Q3VycmVudEZyYW1lLCBjYWxsRnJhbWUsIGhhc1NvdXJjZUFwcGVuZGVyKCkgPyAmYnl0ZWNvZGVP
ZmZzZXQgOiBudWxscHRyKTsKIAogICAgIGlmIChoYXNUcmFjZSAmJiBjYWxsRnJhbWUgJiYgaGFz
U291cmNlQXBwZW5kZXIoKSkgewotICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCkpIAorICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5jYWxsZWUoKS5pc1dhc20o
KSk7CiAgICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9yKGNhbGxGcmFtZSwgdGhpcywgYnl0
ZWNvZGVPZmZzZXQpOworICAgICAgICB9CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJOdW1iZXJPYmplY3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseVRvSlNDYWxs
ZWUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjk1LDE1ICsyOTQsNCBAQCBK
U1ZhbHVlIEpTQ2VsbDo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYm9vbCBKU0NlbGw6OmlzQW55V2FzbUNhbGxlZShWTSYg
dm0pIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHJldHVybiBpbmhlcml0
cyh2bSwgSlNXZWJBc3NlbWJseUNhbGxlZTo6aW5mbygpKSB8fCBpc1dlYkFzc2VtYmx5VG9KU0Nh
bGxlZSh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEw
MSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc1N5
bWJvbCgpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKLSAgICBib29sIGlzQW55
V2FzbUNhbGxlZShWTSYpIGNvbnN0OwogICAgIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBjb25zdDsK
ICAgICBib29sIGlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc1Byb3h5
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
SW5saW5lcy5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2LDEyIEBA
IGlubGluZSB2b2lkIEpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW4KIAogQUxXQVlTX0lOTElO
RSBWTSYgRXhlY1N0YXRlOjp2bSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGNhbGxlZSgpKTsKLSAg
ICBBU1NFUlQoY2FsbGVlKCktPnZtKCkpOwotICAgIEFTU0VSVCghY2FsbGVlKCktPmlzTGFyZ2VB
bGxvY2F0aW9uKCkpOworICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxs
KCk7CisgICAgQVNTRVJUKGNhbGxlZSk7CisgICAgQVNTRVJUKGNhbGxlZS0+dm0oKSk7CisgICAg
QVNTRVJUKCFjYWxsZWUtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwogICAgIC8vIFRoaXMgaXMgYW4g
aW1wb3J0YW50IG9wdGltaXphdGlvbiBzaW5jZSB3ZSBhY2Nlc3MgdGhpcyBzbyBvZnRlbi4KLSAg
ICByZXR1cm4gKmNhbGxlZSgpLT5tYXJrZWRCbG9jaygpLnZtKCk7CisgICAgcmV0dXJuICpjYWxs
ZWUtPm1hcmtlZEJsb2NrKCkudm0oKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsMTAgQEAgcHVibGljOgogCiAg
ICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
IGNvbnN0CiAgICAgewotICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgp
OworICAgICAgICBpZiAoIXZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBjYWxsZWUg
PSB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKTsKICAgICAgICAgaWYgKGNhbGxlZSAhPSBtX3Rh
cmdldENhbGxlZSkKICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwog
CkBAIC0yNzksNyArMjgyLDEwIEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVz
IG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsKLSAgICAgICAg
SlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKKyAgICAgICAgaWYgKCF2aXNpdG9y
LT5jYWxsZWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNv
bnRpbnVlOworCisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlzaXRvci0+Y2FsbGVlKCkuYXND
ZWxsKCk7CiAKICAgICAgICAgaWYgKGNhbGxlZSAmJiBjYWxsZWUtPmluaGVyaXRzKCpjYWxsZWUt
PnZtKCksIEpTQm91bmRGdW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgICAgIHJldHVybiBTdGFj
a1Zpc2l0b3I6OkNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNyArMTE2LDYgQEAKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKICNpbmNsdWRlICJKU1dl
YWtTZXQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGF6eUNs
YXNzU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkxhenlQcm9wZXJ0eUlubGluZXMuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEzICsxMTcs
MTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcmVjb3JkSlNGcmFtZShWZWN0b3I8VW5wcm9jZXNz
ZWRTdGFja0ZyYW1lPiYgc3RhY2tUcmFjZSkKICAgICB7CiAgICAgICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleDsKLSAgICAgICAgSlNWYWx1ZSB1bnNhZmVDYWxsZWUgPSBtX2NhbGxGcmFt
ZS0+dW5zYWZlQ2FsbGVlKCk7CisgICAgICAgIENhbGxlZUJpdHMgdW5zYWZlQ2FsbGVlID0gbV9j
YWxsRnJhbWUtPnVuc2FmZUNhbGxlZSgpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fY2FsbEZyYW1lLT51bnNhZmVDb2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNvZGVCbG9jaykg
ewogICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRDb2RlQmxvY2soY29kZUJsb2NrKSk7CiAgICAg
ICAgICAgICBjYWxsU2l0ZUluZGV4ID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNhbGxTaXRlSW5kZXgo
KTsKICAgICAgICAgfQotICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRT
dGFja0ZyYW1lKGNvZGVCbG9jaywgSlNWYWx1ZTo6ZW5jb2RlKHVuc2FmZUNhbGxlZSksIGNhbGxT
aXRlSW5kZXgpOworICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdID0gVW5wcm9jZXNzZWRTdGFj
a0ZyYW1lKGNvZGVCbG9jaywgdW5zYWZlQ2FsbGVlLCBjYWxsU2l0ZUluZGV4KTsKICAgICAgICAg
bV9kZXB0aCsrOwogICAgIH0KIApAQCAtNDg1LDExICs0ODUsMTYgQEAgdm9pZCBTYW1wbGluZ1By
b2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAgICAgICAgc3RhY2tUcmFjZS5mcmFtZXMu
YXBwZW5kKFN0YWNrRnJhbWUoKSk7CiAgICAgICAgIH07CiAKLSAgICAgICAgYXV0byBzdG9yZUNh
bGxlZUludG9MYXN0RnJhbWUgPSBbJl0gKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRDYWxsZWUpIHsK
KyAgICAgICAgYXV0byBzdG9yZUNhbGxlZUludG9MYXN0RnJhbWUgPSBbJl0gKENhbGxlZUJpdHMg
Y2FsbGVlQml0cykgewogICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsZWUgaWYgaXQncyBhIHZh
bGlkIEdDIG9iamVjdC4KLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRDYWxsZWUpOwogICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9
IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUhhc0V4
ZWN1dGFibGUgPSAhIXN0YWNrRnJhbWUuZXhlY3V0YWJsZTsKKyAgICAgICAgICAgIGlmIChjYWxs
ZWVCaXRzLmlzV2FzbSgpKSB7CisgICAgICAgICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUg
PSBGcmFtZVR5cGU6OlVua25vd247CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlIGNhbGxlZSA9IGNhbGxlZUJpdHMuYXNDZWxsKCk7
CiAgICAgICAgICAgICBpZiAoIUhlYXBVdGlsOjppc1ZhbHVlR0NPYmplY3QobV92bS5oZWFwLCBm
aWx0ZXIsIGNhbGxlZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIYXNFeGVjdXRh
YmxlKQogICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlw
ZTo6VW5rbm93bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhCiBwdWJsaWM6
CiAKICAgICBzdHJ1Y3QgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIHsKLSAgICAgICAgVW5wcm9jZXNz
ZWRTdGFja0ZyYW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBFbmNvZGVkSlNWYWx1ZSBjYWxsZWUs
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICAgICAgVW5wcm9jZXNzZWRTdGFja0Zy
YW1lKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsZWVCaXRzIGNhbGxlZSwgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQogICAgICAgICAgICAgOiB1bnZlcmlmaWVkQ2FsbGVlKGNhbGxlZSkK
ICAgICAgICAgICAgICwgdmVyaWZpZWRDb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAgICAg
LCBjYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpCkBAIC01NywxMyArNTcsMTAgQEAgcHVibGlj
OgogICAgICAgICAgICAgOiBjQ29kZVBDKHBjKQogICAgICAgICB7IH0KIAotICAgICAgICBVbnBy
b2Nlc3NlZFN0YWNrRnJhbWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnZlcmlmaWVkQ2Fs
bGVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgVW5w
cm9jZXNzZWRTdGFja0ZyYW1lKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQqIGNDb2RlUEMg
eyBudWxscHRyIH07Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlIHVudmVyaWZpZWRDYWxsZWU7Cisg
ICAgICAgIENhbGxlZUJpdHMgdW52ZXJpZmllZENhbGxlZTsKICAgICAgICAgQ29kZUJsb2NrKiB2
ZXJpZmllZENvZGVCbG9jayB7IG51bGxwdHIgfTsKICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dGFja0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdGFja0ZyYW1lLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEw
IEBAIGludHB0cl90IFN0YWNrRnJhbWU6OnNvdXJjZUlEKCkgY29uc3QKIAogU3RyaW5nIFN0YWNr
RnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiB7CisgICAgaWYgKG1faXNXYXNtRnJhbWUpCisgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CisKICAgICBpZiAoIW1fY29k
ZUJsb2NrKSB7Ci0gICAgICAgIGlmIChtX2NhbGxlZSAmJiBtX2NhbGxlZS0+aXNBbnlXYXNtQ2Fs
bGVlKCptX2NhbGxlZS0+dm0oKSkpCi0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJb
d2FzbSBjb2RlXSIpOwogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJbbmF0aXZlIGNvZGVd
Iik7CiAgICAgfQogCkBAIC01Niw2ICs1Nyw5IEBAIFN0cmluZyBTdGFja0ZyYW1lOjpzb3VyY2VV
UkwoKSBjb25zdAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkgY29u
c3QKIHsKKyAgICBpZiAobV9pc1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiPHdhc20+Iik7CisKICAgICBpZiAobV9jb2RlQmxvY2spIHsKICAgICAgICAgc3dpdGNoICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgICAgICBjYXNlIEV2YWxDb2RlOgpAQCAtNzIs
OCArNzYsNiBAQCBTdHJpbmcgU3RhY2tGcmFtZTo6ZnVuY3Rpb25OYW1lKFZNJiB2bSkgCiAgICAg
fQogICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChtX2NhbGxlZSkgewotICAgICAgICBpZiAobV9j
YWxsZWUtPmlzQW55V2FzbUNhbGxlZSgqbV9jYWxsZWUtPnZtKCkpKQotICAgICAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiPHdhc20+Iik7CiAgICAgICAgIGlmIChtX2NhbGxlZS0+aXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIG5hbWUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUodm0sIGpz
Q2FzdDxKU09iamVjdCo+KG1fY2FsbGVlLmdldCgpKSkuaW1wbCgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmgJKHJldmlzaW9uIDIxNDg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBKU09iamVjdDsKIAogY2xhc3MgU3RhY2tG
cmFtZSB7CiBwdWJsaWM6CisgICAgU3RhY2tGcmFtZSgpID0gZGVmYXVsdDsKKwogICAgIFN0YWNr
RnJhbWUoVk0mIHZtLCBKU0NlbGwqIGNhbGxlZSkKICAgICAgICAgOiBtX2NhbGxlZSh2bSwgY2Fs
bGVlKQogICAgIHsgfQpAQCAtNDUsNiArNDcsMTMgQEAgcHVibGljOgogICAgICAgICAsIG1fYnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAgeyB9CiAKKyAgICBzdGF0aWMgU3RhY2tG
cmFtZSB3YXNtKCkKKyAgICB7CisgICAgICAgIFN0YWNrRnJhbWUgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9pc1dhc21GcmFtZSA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCiAgICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0IHsgcmV0dXJuICEhbV9j
b2RlQmxvY2s7IH0KICAgICAKICAgICB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVk
JiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKQEAgLTY1LDcgKzc0LDcgQEAgcHJpdmF0
ZToKICAgICBTdHJvbmc8SlNDZWxsPiBtX2NhbGxlZSB7IH07CiAgICAgU3Ryb25nPENvZGVCbG9j
az4gbV9jb2RlQmxvY2sgeyB9OwogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQgeyBVSU5U
X01BWCB9OwotICAgIAorICAgIGJvb2wgbV9pc1dhc21GcmFtZSB7IGZhbHNlIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlLnNldCgq
dGhpcywgSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIHdlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdl
YkFzc2VtYmx5VG9KU0NhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2Vu
ZGlmCkBAIC02MTYsMTQgKzYxNSwxNCBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsCiAKICAgICBBU1NFUlQoZXhlYyA9PSB0b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMt
PnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKIAotICAgIGludGVycHJldGVy
LT5ub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihleGVjLCBleGNlcHRpb24pOwor
ICAgIGludGVycHJldGVyLT5ub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bigqdGhp
cywgZXhlYywgZXhjZXB0aW9uKTsKIAogICAgIHNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogfQog
CiBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhy
b3duVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSAqdGhp
czsKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4o
dm0sIHRocm93blZhbHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikKICAgICAgICAgZXhjZXB0aW9u
ID0gRXhjZXB0aW9uOjpjcmVhdGUoKnRoaXMsIHRocm93blZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw2IEBAIHB1
YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2Fs
bGVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5VG9KU0NhbGxl
ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJB
c3NlbWJseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2Vi
QXNzZW1ibHkuaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXZWJBc3NlbWJseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJq
cy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvci5oIgogI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1
ZGUgImpzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNDg2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIyLDcgKzkyMiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW4KICAgICAgICAgVmFsdWUqIGNvZGVCbG9jayA9IGlzSlNCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsCiAgICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ29kZUJsb2NrKCkpOwogICAgICAgICBWYWx1ZSoganVtcERlc3RpbmF0aW9uID0gaXNK
U0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKLSAgICAgICAgICAgIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjb2RlQmxvY2ssIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6Om9mZnNldE9mSW1wb3J0V2FzbVRvSlNTdHViKG1faW5mby5pbnRlcm5hbEZ1bmN0aW9uQ291
bnQoKSwgZnVuY3Rpb25JbmRleCkpOworICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGNvZGVCbG9jaywgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBv
cnRXYXNtVG9KU1N0dWIoZnVuY3Rpb25JbmRleCkpOwogICAgICAgICBWYWx1ZSoganNDYWxsUmVz
dWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNKU0Jsb2Nr
LCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0g
KFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1
LDcgKzQ1NSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSgKICAg
ICB9CiAKICAgICAvLyBUYWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0
aW9uLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeVBvaW50Q29kZSgpKSwgc2NyYXRjaCk7CisgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mV2FzbUVudHJ5cG9pbnQoKSksIHNjcmF0Y2gpOwogICAgIGppdC5qdW1wKHNjcmF0Y2gpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAkocmV2aXNpb24gMjE0
ODY0KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2Fs
bGVlLmNwcDoyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNhbGxl
ZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07CisKK0pTV2ViQXNzZW1ibHlDYWxsZWU6
OkpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1i
bHlDYWxsZWVTdHJ1Y3R1cmUuZ2V0KCkpCit7IH0KKwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIG1fZW50cnlwb2ludCA9IFdU
Rk1vdmUoZW50cnlwb2ludCk7CisgICAgV2FzbTo6cmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7
Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTV2Vi
QXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKKyAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSh0aGlzT2Jq
ZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOworICAgIHRoaXNPYmplY3QtPkpTV2ViQXNz
ZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM2
ICsyNCwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaCIKIAotbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseUNhbGxlZTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07Ci0KLUpTV2ViQXNzZW1ibHlDYWxsZWU6OkpTV2Vi
QXNzZW1ibHlDYWxsZWUoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDYWxs
ZWVTdHJ1Y3R1cmUuZ2V0KCkpCi17IH0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotewotICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLQotICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUo
ZW50cnlwb2ludCk7Ci0gICAgV2FzbTo6cmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci19Ci0K
LXZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCitDYWxsZWU6
OkNhbGxlZShFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICA6IG1fZW50cnlwb2ludChXVEZN
b3ZlKGVudHJ5cG9pbnQpKQogewotICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5y
ZWdpc3RlckNvZGUodGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVm
KCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQu
Y29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKLSAgICB0
aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOwor
ICAgIHJlZ2lzdGVyQ29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBKU0MK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCShyZXZpc2lv
biAyMTQ4NjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDYWxsZWUuaDoyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9m
ZnNldExpc3QuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVi
bGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNhbGxlZSog
Y3JlYXRlKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgeworICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNhbGxlZSh2
bSk7CisgICAgICAgIGNhbGxlZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUoZW50cnlwb2lu
dCkpOworICAgICAgICByZXR1cm4gY2FsbGVlOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgdm9pZCogZW50cnlwb2ludCgpIHsgcmV0
dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
IH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKK3ByaXZhdGU6Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5
cG9pbnQmJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYp
OworCisgICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0NSAr
MjcsMzIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogCi1uYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWUgOiBwdWJsaWMgSlNDZWxsIHsKK2Ns
YXNzIENhbGxlZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBjcmVhdGUoVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkK
KyAgICBzdGF0aWMgUmVmPENhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50KQogICAgIHsKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNhbGxlZT4odm0uaGVhcCkpIEpTV2Vi
QXNzZW1ibHlDYWxsZWUodm0pOwotICAgICAgICBjYWxsZWUtPmZpbmlzaENyZWF0aW9uKHZtLCBX
VEZNb3ZlKGVudHJ5cG9pbnQpKTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICAgICAgQ2Fs
bGVlKiBjYWxsZWUgPSBuZXcgQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKmNhbGxlZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwotICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KICAgICB2b2lkKiBlbnRyeXBvaW50KCkgeyByZXR1cm4g
bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQog
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVy
biAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAogcHJpdmF0ZToKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50cnlwb2lu
dCYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJik7CiAKICAgICBX
YXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkocmV2aXNp
b24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwog
Y2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNtIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgi
CisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiV2FzbUJpbmRpbmcuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkocmV2aXNpb24g
MjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbExp
bmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVl
OwogY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5hbWVzcGFjZSBXYXNtIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuSW5saW5lcy5oCShyZXZpc2lvbiAy
MTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewpAQCAtMzksMTMgKzM5LDE3IEBAIHZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMo
Y29uc3QgRnVuY3QKICAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7
IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsg
KytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKICAgICAgICAgV2FzbUludGVybmFsRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XS5nZXQoKTsKIAotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUobV92bSwgV1RGTW92ZShmdW5jdGlvbi0+
anNUb1dhc21FbnRyeXBvaW50KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihmdW5jdGlvbi0+anNUb1dhc21DYWxsZWVNb3ZlTG9jYXRpb24sIGpzRW50cnlwb2ludENh
bGxlZSk7CisgICAgICAgIGF1dG8gd3JhcENhbGxlZSA9IFtdIChDYWxsZWUqIGNhbGxlZSkgLT4g
dm9pZCogeworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oY2FsbGVlKSB8IDEpOworICAgICAgICB9OwogCi0gICAgICAgIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxl
ZTo6Y3JlYXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBSZWY8V2FzbTo6Q2Fs
bGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1
bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgd3JhcENh
bGxlZShqc0VudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAotICAgICAgICBjYWxsYmFjayhpbnRl
cm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxs
ZWUpOworICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdh
c206OkNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPndhc21FbnRyeXBvaW50KSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+d2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgd3JhcENhbGxlZSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwor
CisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShqc0VudHJ5
cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkocmV2aXNp
b24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0
aHJvd0V4Y2VwdGlvbkZyb20KICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CiAgICAg
ICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIEFTU0VSVCghIXZt
LT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBt
YWtlIHRoaXMgYmV0dGVyOgorICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0IHRo
ZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pCisgICAg
ICAgIC8vIHJlcXVpcmUgYSBjZWxsIGluIHRoZSBjYWxsZWUgZmllbGQgdG8gbG9hZCB0aGUgVk0u
IChUaGUgYmFzZWxpbmUgSklUIGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgLy8gdGhpcyBzaW5j
ZSBpdCBpcyBjb21waWxlZCB3aXRoIGEgY29uc3RhbnQgVk0gcG9pbnRlci4pIFdlIGNvdWxkIG1h
a2UgdGhlIGNhbGxpbmcgY29udmV0aW9uCisgICAgICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0
IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBq
dW1waW5nCisgICAgICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRo
aXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA0NDAKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHVpbnQ2NF90Kj4oZXhlYylbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4od2FzbUNvbnRleHQtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKICAg
ICAgICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKICAgICB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKLQotI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFz
c0luZm8gSlNXZWJBc3NlbWJseUNhbGxlZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUi
LCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07
Ci0KLUpTV2ViQXNzZW1ibHlDYWxsZWU6OkpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mIHZtKQotICAg
IDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuZ2V0KCkpCi17IH0KLQot
dm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LQotICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7Ci0gICAgV2FzbTo6cmVn
aXN0ZXJDb2RlKG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNXZWJBc3NlbWJseUNhbGxlZSogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKLSAgICBXYXNt
Ojp1bnJlZ2lzdGVyQ29kZSh0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwot
ICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVl
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDYWxsZWUuaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCShub25leGlzdGVudCkKQEAgLTEsNzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNDZWxs
LmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKLSNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0KLSAgICBz
dGF0aWMgSlNXZWJBc3NlbWJseUNhbGxlZSogY3JlYXRlKFZNJiB2bSwgV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQpCi0gICAgewotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxs
ZWUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseUNhbGxlZSh2bSk7Ci0gICAgICAgIGNhbGxlZS0+ZmluaXNoQ3Jl
YXRpb24odm0sIFdURk1vdmUoZW50cnlwb2ludCkpOwotICAgICAgICByZXR1cm4gY2FsbGVlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0g
ICAgdm9pZCogZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IH0KLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzOyB9Ci0KLXByaXZhdGU6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIFdhc206OkVudHJ5cG9pbnQmJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNXZWJBc3NlbWJseUNhbGxlZShWTSYpOwotCi0gICAgV2FzbTo6RW50cnlwb2ludCBtX2Vu
dHJ5cG9pbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNyBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpK
U1dlYkFzc2VtYmx5Q29kCiAgICAgbV9tb2R1bGUuc2V0KHZtLCB0aGlzLCBvd25lcik7CiAgICAg
QVNTRVJUKCFtb2R1bGUoKS0+Y29kZUJsb2NrKG1vZGUpKTsKICAgICBtb2R1bGUoKS0+c2V0Q29k
ZUJsb2NrKHZtLCBtb2RlLCB0aGlzKTsKLQotICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2Fs
bGVlQ291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIDIp
OworICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCAqIDIpOwogfQogCiB2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoKQpAQCAtNTcsNyArNTYsNyBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluaXRpYWxpemUoCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFZNJiB2bSA9IHBsYW4oKS52bSgpOwotICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHZtLCB2bS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghcGxhbigpLmhhc1dvcmso
KSk7CiAKICAgICBpZiAocGxhbigpLmZhaWxlZCgpKSB7CkBAIC03NCwxMSArNzMsMTEgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbml0aWFsaXplKAogCiAgICAgLy8gVGhlIGNvZGUg
YSBtb2R1bGUgZW1pdHMgdG8gY2FsbCBpbnRvIEpTIHJlbGllcyBvbiB1cyB0byBzZXQgdGhpcyB1
cC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV93YXNtRXhpdFN0dWJzLnNpemUoKTsg
aSsrKQotICAgICAgICBpbXBvcnRXYXNtVG9KU1N0dWIobV9jYWxsZWVDb3VudCwgaSkgPSBtX3dh
c21FeGl0U3R1YnNbaV0ud2FzbVRvSnMuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgIGltcG9ydFdhc21Ub0pTU3R1YihpKSA9IG1fd2FzbUV4aXRTdHVic1tpXS53YXNtVG9Kcy5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAotICAgIHBsYW4oKS5pbml0aWFsaXplQ2FsbGVl
cyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5
cG9pbnRDYWxsZWUsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7
Ci0gICAgICAgIHNldEpTRW50cnlwb2ludENhbGxlZSh2bSwgY2FsbGVlSW5kZXgsIGpzRW50cnlw
b2ludENhbGxlZSk7Ci0gICAgICAgIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKHZtLCBjYWxsZWVJ
bmRleCwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgIHBsYW4oKS5pbml0aWFsaXplQ2FsbGVl
cyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWY8V2FzbTo6Q2FsbGVlPiYmIGpzRW50cnlw
b2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgewor
ICAgICAgICBzZXRKU0VudHJ5cG9pbnRDYWxsZWUoY2FsbGVlSW5kZXgsIFdURk1vdmUoanNFbnRy
eXBvaW50Q2FsbGVlKSk7CisgICAgICAgIHNldFdhc21FbnRyeXBvaW50Q2FsbGVlKGNhbGxlZUlu
ZGV4LCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfSk7CiAKICAgICBtX3Bs
YW4gPSBudWxscHRyOwpAQCAtMTE4LDggKzExNyw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVC
bG9jazo6dmlzaXRDaGlsZHIKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGUpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNvdW50ICogMjsg
aSsrKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5jYWxsZWVzKClbaV0pOwog
CiAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZ0aGlzT2JqZWN0LT5tX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkocmV2aXNpb24gMjE0
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
YWxsZWUuaCIKICNpbmNsdWRlICJQcm9taXNlRGVmZXJyZWRUaW1lci5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKKyNpbmNsdWRl
ICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0mIHZtLCBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBvd25lciwgV2FzbTo6TWVtb3J5TW9kZSBtb2RlLCBSZWY8V2FzbTo6
UGxhbj4mJiBwbGFuLCB1bnNpZ25lZCBjYWxsZWVDb3VudCwgdW5zaWduZWQgZnVuY3Rpb25JbXBv
cnRDb3VudCkKICAgICB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXpl
KGNhbGxlZUNvdW50LCBmdW5jdGlvbkltcG9ydENvdW50KSkpIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2sodm0sIG93bmVyLCBtb2RlLCBXVEZNb3ZlKHBsYW4pLCBjYWxsZWVDb3VudCk7CisgICAgICAg
IGF1dG8qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGZ1bmN0aW9uSW1wb3J0Q291bnQpKSkg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1vdmUocGxhbiksIGNh
bGxlZUNvdW50KTsKICAgICAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzUsNzEgKzc2LDY0IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcmIGVycm9yTWVzc2FnZSgpIHsgQVNTRVJUKCFydW5uYWJsZSgpKTsgcmV0dXJuIG1fZXJy
b3JNZXNzYWdlOyB9CiAgICAgYm9vbCBpc1NhZmVUb1J1bihKU1dlYkFzc2VtYmx5TWVtb3J5Kikg
Y29uc3Q7CiAKLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICAvLyBU
aGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgZmllbGRzIGhh
dmUgYmVlbiBwb2x1bGF0ZWQuCisgICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbklt
cG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5k
ZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtj
YWxsZWVJbmRleF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4
XS5nZXQoKTsKICAgICB9Ci0KLSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KQorICAgIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwog
ICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0
aW9uSW1wb3J0Q291bnQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBt
X2NhbGxlZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1f
Y2FsbGVlQ291bnRdLmdldCgpOworICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRl
eCArIG1fY2FsbGVlQ291bnRdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0SlNFbnRyeXBv
aW50Q2FsbGVlKFZNJiB2bSwgdW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIGNhbGxlZSkKKyAgICB2b2lkKiB3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVk
IGltcG9ydEluZGV4KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXgg
PCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0s
IHRoaXMsIGNhbGxlZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEluZGV4IDwgbV93
YXNtRXhpdFN0dWJzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX3dhc21FeGl0U3R1YnNbaW1w
b3J0SW5kZXhdLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJ
bmRleCwgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAg
ICAgICBjYWxsZWVzKClbY2FsbGVlSW5kZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMs
IGNhbGxlZSk7CisgICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yo
dm9pZCopICogaW1wb3J0SW5kZXg7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNz
ZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmll
cjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZkNhbGxlZXMoKSk7IH0KLQotICAgIHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQo
dW5zaWduZWQgaW1wb3J0SW5kZXgpCitwcml2YXRlOgorICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50
Q2FsbGVlKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWY8V2FzbTo6Q2FsbGVlPiYmIGNhbGxlZSkK
ICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEluZGV4IDwgbV93YXNtRXhpdFN0
dWJzLnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX3dhc21FeGl0U3R1YnNbaW1wb3J0SW5kZXhd
Lndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAgICBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXhdID0gV1RGTW92ZShjYWxsZWUpOwogICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgY2FsbGVlQ291bnQsIHVuc2ln
bmVkIGltcG9ydEluZGV4KQorICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIFJlZjxXYXNtOjpDYWxsZWU+JiYgY2FsbGVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9mZnNldE9mQ2FsbGVlcygpCi0gICAgICAgICAgICArIChzaXplb2YoV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIGNhbGxlZUNvdW50ICogMikKLSAgICAgICAg
ICAgICsgKHNpemVvZih2b2lkKikgKiBpbXBvcnRJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxlZUluZGV4IDwgbV9jYWxsZWVDb3VudCk7CisgICAgICAgIG1fY2FsbGVlc1tjYWxs
ZWVJbmRleCArIG1fY2FsbGVlQ291bnRdID0gV1RGTW92ZShjYWxsZWUpOwogICAgIH0KIAotcHJp
dmF0ZToKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIFdhc206Ok1lbW9yeU1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmLCB1bnNpZ25lZCBjYWxsZWVD
b3VudCk7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWVzKCkKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSW1wb3J0U3R1YnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlDb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihzaXplb2YoSlNXZWJBc3NlbWJs
eUNvZGVCbG9jaykpOwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUo
dW5zaWduZWQgY2FsbGVlQ291bnQsIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAg
c3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mQ2FsbGVlcygpCi0gICAgICAgICAgICAr
IChzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAqIGNhbGxlZUNvdW50
ICogMikKLSAgICAgICAgICAgICsgKHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50
KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikg
KiBmdW5jdGlvbkltcG9ydENvdW50OwogICAgIH0KIAotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9K
U1N0dWIodW5zaWduZWQgY2FsbGVlQ291bnQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHZv
aWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAg
ICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgKyBvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihjYWxsZWVDb3VudCwgaW1wb3J0SW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpKTsKICAg
ICB9CiAKICAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5j
b25kaXRpb25hbEZpbmFsaXplciB7CkBAIC0xNTAsNiArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICBV
bmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8
Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21FeGl0
U3R1YnM+IG1fd2FzbUV4aXRTdHViczsKKyAgICBWZWN0b3I8UmVmUHRyPFdhc206OkNhbGxlZT4+
IG1fY2FsbGVlczsKICAgICAvLyBUaGUgcGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUg
YmxvY2suCiAgICAgUmVmUHRyPFdhc206OlBsYW4+IG1fcGxhbjsKICAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJ
bXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9
CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRG
dW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1
bmN0aW9uTnVtICogc2l6ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9CiAKKyAg
ICBXZWJBc3NlbWJseVRvSlNDYWxsZWUqIHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJu
IG1fY2FsbGVlLmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvci5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yKSB9OworCiBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKiBKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yPih2bS5o
ZWFwKSkgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcih2bSwgc3RydWN0dXJlKTsKQEAgLTQ2LDkg
KzQ4LDYgQEAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6SlNXZWJBc3NlbWJseQogewogfQog
Ci1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6c19pbmZvID0geyAi
V2ViQXNzZW1ibHkuUnVudGltZUVycm9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKSB9OwotCi0gICAgCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
CShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNs
dWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQu
aCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgpAQCAt
MTIyLDggKzEyMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwK
IAogICAgIC8vIE5vdGU6IHdlIHNwZWNpZmljYWxseSB1c2UgdGhlIFdlYkFzc2VtYmx5RnVuY3Rp
b24gYXMgdGhlIGNhbGxlZSB0byBiZWdpbiB3aXRoIGluIHRoZSBQcm90b0NhbGxGcmFtZS4KICAg
ICAvLyBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgY2FsbGluZyBpbnRvIHRoZSBsbGludCBt
YXkgc3RhY2sgb3ZlcmZsb3csIGFuZCB0aGUgc3RhY2sgb3ZlcmZsb3cKLSAgICAvLyBoYW5kbGVy
IG1pZ2h0IHJlYWQgdGhlIGdsb2JhbCBvYmplY3QgZnJvbSB0aGUgY2FsbGVlLiBUaGUgSlNXZWJB
c3NlbWJseUNhbGxlZSBkb2Vzbid0IGhhdmUgYQotICAgIC8vIGdsb2JhbCBvYmplY3QsIGJ1dCB0
aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiBkb2VzLgorICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0
aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJv
dG9DYWxsRnJhbWU7CiAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rp
b24sIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIApAQCAtMTU4LDEy
ICsxNTcsMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAg
IHJldHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
V2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQs
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5RnVu
Y3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0
ciwgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZt
LmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
d2FzbUVudHJ5cG9pbnQsIHNpZ25hdHVyZUluZGV4KTsKLSAgICBmdW5jdGlvbi0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UsIGpzRW50cnlwb2lu
dCwgd2FzbUVudHJ5cG9pbnQpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkp
IFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5
cG9pbnQsIHdhc21FbnRyeXBvaW50LCBzaWduYXR1cmVJbmRleCk7CisgICAgZnVuY3Rpb24tPmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwgIldl
YkFzc2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxsb2Nh
dGlvbiBzaW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkBA
IC0xNzQsOSArMTczLDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
U3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhXZWJBc3NlbWJseUZ1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5
cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX3dhc21FbnRyeVBvaW50Q29kZSh3
YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpKQorICAgICwgbV9qc0VudHJ5cG9pbnQoanNFbnRy
eXBvaW50LmVudHJ5cG9pbnQoKSkKKyAgICAsIG1fd2FzbUVudHJ5cG9pbnQod2FzbUVudHJ5cG9p
bnQuZW50cnlwb2ludCgpKQogICAgICwgbV9zaWduYXR1cmVJbmRleChzaWduYXR1cmVJbmRleCkK
IHsgfQogCkBAIC0xODYsMTkgKzE4NiwxMyBAQCB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZp
c2l0Q2hpbGRyZW4oCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0gICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9qc0VudHJ5cG9pbnQpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fd2FzbUVudHJ5cG9pbnQpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnQpCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0
aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKICAgICBtX2luc3Rh
bmNlLnNldCh2bSwgdGhpcywgaW5zdGFuY2UpOwotICAgIEFTU0VSVChqc0VudHJ5cG9pbnQgIT0g
d2FzbUVudHJ5cG9pbnQpOwotICAgIG1fanNFbnRyeXBvaW50LnNldCh2bSwgdGhpcywganNFbnRy
eXBvaW50KTsKLSAgICBtX3dhc21FbnRyeXBvaW50LnNldCh2bSwgdGhpcywgd2FzbUVudHJ5cG9p
bnQpOwotICAgIEFTU0VSVChtX3dhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkgPT0gbV93YXNt
RW50cnlQb2ludENvZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJl
dmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5Q2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ5LDI5ICs0OSwzMSBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludCwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnQsIFdhc206OlNp
Z25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0
dXJlSW5kZXg7IH0KLSAgICB2b2lkKiB3YXNtRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fd2FzbUVu
dHJ5UG9pbnRDb2RlOyB9Ci0gICAgdm9pZCoganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0Vu
dHJ5cG9pbnQtPmVudHJ5cG9pbnQoKTsgfQorICAgIHZvaWQqIHdhc21FbnRyeXBvaW50KCkgeyBy
ZXR1cm4gbV93YXNtRW50cnlwb2ludDsgfQorICAgIHZvaWQqIGpzRW50cnlwb2ludCgpIHsgcmV0
dXJuIG1fanNFbnRyeXBvaW50OyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5z
dGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9p
bnN0YW5jZSk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbUVudHJ5UG9pbnRD
b2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1fd2Fz
bUVudHJ5UG9pbnRDb2RlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50
cnlwb2ludCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBt
X3dhc21FbnRyeXBvaW50KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRy
eXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCk7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHByaXZhdGU6Ci0g
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
SlNXZWJBc3NlbWJseUNhbGxlZSosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxs
ZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4g
bV9pbnN0YW5jZTsKLSAgICB2b2lkKiBtX3dhc21FbnRyeVBvaW50Q29kZTsgLy8gQ2FjaGUgY29k
ZSBwb2ludGVyOiBhbGxvd3MgdGhlIHdhc20gLT4gd2FzbSBzdHViIHRvIGRvIGEgc2luZ2xlIGxv
YWQgYW5kIGp1bXAgaW5zdGVhZCBvZiBoYXZpbmcgZGVwZW5kZW50IGxvYWRzLgotICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX2pzRW50cnlwb2ludDsKLSAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93YXNtRW50cnlwb2ludDsKKyAgICAvLyBXZSBj
YW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gdGhlc2UgZXhlY3V0YWJsZSBhZGRyZXNzIHBvaW50ZXJz
IHNpbmNlCisgICAgLy8gd2UgaGF2ZSBhIEdDIHJlZmVyZW5jZSB0byBvdXIgaW5zdGFuY2UsIHdo
aWNoIGtlZXBzIGFsaXZlIHRoZSBDb2RlQmxvY2ssCisgICAgLy8gd2hpY2ggb3ducyB0aGlzIHBv
aW50ZXIuCisgICAgdm9pZCogbV9qc0VudHJ5cG9pbnQ7CisgICAgdm9pZCogbV93YXNtRW50cnlw
b2ludDsKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5k
ZXggYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3
aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8v
IGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRl
ZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNt
Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVs
ZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjUwogICAgICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBF
eHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAgICAgICAg
ICAgICAgIC8vICAgICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4KICAgICAgICAgICAgICAgICAv
LyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxl
ZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50
cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CisgICAg
ICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
PmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7
CisgICAgICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNv
ZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5r
aW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhw
LmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWdu
YXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRy
eXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CkBAIC0xOTYsOCArMTk2LDggQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgSlNPYmplY3Qq
IHN0YXJ0RnVuY3Rpb24gPSBpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb24oc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgc3Rh
cnRGdW5jdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIHdh
c21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0Iiwg
aW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1
bmN0aW9uKTsKICAgICAgICAgfQpAQCAtMjcwLDggKzI3MCw4IEBAIEpTVmFsdWUgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAg
ICAgICAgICAgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Cisg
ICAgICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVC
bG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rpb24gImZvbyIg
YXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28g
c2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0wNC0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogSlNXZWJBc3NlbWJseUNhbGxlZSBz
aG91bGQgbm90IGJlIGEgSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzAxMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsZXJET01XaW5k
b3cpOgorCiAyMDE3LTA0LTAzICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtjc3MtYWxpZ25dIEFkYXB0IHBsYWNlLWNvbnRlbnQgYWxpZ25tZW50
IHNob3J0aGFuZCB0byB0aGUgbmV3IGJhc2VsaW5lIHN5bnRheApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMTQ4NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDQsMTIgKzMwNCwxMiBAQCBET01XaW5kb3cmIGNhbGxlckRPTVdpbmRv
dyhFeGVjU3RhdGUqIGV4CiAgICAgICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRv
ci0+Y29kZUJsb2NrKCkpCiAgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmlzaXRv
ci0+Y2FsbGVlKCkucmF3UHRyKCkpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUg
aXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KICAgICAgICAg
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdl
dCB0aGUgZ2xvYmFsIG9iamVjdAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0
IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU3MjEKLSAgICAgICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
dmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkgJiYgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkt
PmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpLT5nbG9iYWxPYmplY3QoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAg
ICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306184</attachid>
            <date>2017-04-04 12:08:54 -0700</date>
            <delta_ts>2017-04-04 14:30:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>120455</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NiBA
QAorMjAxNy0wNC0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWJBc3NlbWJseTogSlNXZWJBc3NlbWJseUNhbGxlZSBzaG91bGQgbm90IGJlIGEgSlNDZWxs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGlzIHBlcmhhcHMgdGhlIGxhc3QgYmlnIGNoYW5nZSB0byB0aGUgZGVzaWduIG9mIGZ1bmRh
bWVudGFsCisgICAgICAgIFdhc20gQVBJIHRvIGFsbG93IGZvciBQSUMuIEl0IGNoYW5nZXMgSlNX
ZWJBc3NlbWJseUNhbGxlZSBpbnRvIGEgdGhpbmcKKyAgICAgICAgY2FsbGVkIFdhc206OkNhbGxl
ZS4gSXQgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgYmVmb3JlLCBleGNlcHQKKyAgICAgICAg
V2FzbTo6Q2FsbGVlIGlzIG5vdCBhIEpTQ2VsbC4gSSBoYWQgdG8gcmVmYWN0b3IgdGhlIHZhcmlv
dXMgcGFydHMgb2YgdGhlCisgICAgICAgIHJ1bnRpbWUgdGhhdCB3aWxsIHNlZSBDYWxsRnJhbWUn
cyB3aXRoIFdhc206OkNhbGxlZSdzIGluIHRoZSBjYWxsZWUgc2xvdC4KKyAgICAgICAgVGhhbmtm
dWxseSwgdGhlIHBhcnRzIG9mIHRoZSBydW50aW1lIHRoYXQgV2FzbSB0b3VjaGVzIGFyZSBsaW1p
dGVkLiBUaGUKKyAgICAgICAgbWFpbiByZWZhY3RvcmluZyBpcyBjaGFuZ2luZyB0aGUgZXhjZXB0
aW9uIGhhbmRsaW5nIGNvZGUsIHN1Y2ggYXMgdGFraW5nCisgICAgICAgIGEgc3RhY2sgdHJhY2Us
IHRvIGJlIGZyaWVuZGx5IHRvIHNlZWluZyBhIG5vbiBKU0NlbGwgY2FsbGVlLgorICAgICAgICAK
KyAgICAgICAgVGhlIGNhbGxlZSgpIGZ1bmN0aW9uIG9uIEV4ZWNTdGF0ZSBub3cgcmV0dXJucyBh
IGNsYXNzIEkgYWRkZWQgaW4gdGhpcworICAgICAgICBwYXRjaCBjYWxsZWQgQ2FsbGVlQml0cy4g
Q2FsbGVlQml0cyB3aWxsIHRlbGwgeW91IGlmIHRoZSBjYWxsZWUgaXMgYQorICAgICAgICBKU0Nl
bGwgb3IgYSBXYXNtOjpDYWxsZWUuIFdlIHRhZyBXYXNtOjpDYWxsZWUncyB3aXRoIGEgMSBpbiB0
aGVpciBsb3dlcgorICAgICAgICBiaXQgc28gd2UgY2FuIGVhc2lseSB0ZWxsIHdoYXQgaXMgYW5k
IGlzbid0IGEgV2FzbTo6Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVGhlIHN0dWIgdGhhdCBj
YWxscyBvdXQgZnJvbSBXYXNtIHRvIEpTIHN0aWxsIHB1dHMgYSBKU0NlbGwgY2FsbGVlCisgICAg
ICAgIGludG8gdGhlIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHRoZSBjYWxsZWUgbG9naWNhbGx5
IHJlcHJlc2VudHMgYQorICAgICAgICBXYXNtIGZyYW1lLiBUaGUgcmVhc29uIGZvciB0aGlzIGlz
IHRoYXQgd2UgdXNlIHRoZSBjYWxsIElDIGluZnJhc3RydWN0dXJlCisgICAgICAgIHRvIG1ha2Ug
YSBjYWxsIG91dCB0byBKUyBjb2RlLCBhbmQgdGhlIGNvZGUgdGhhdCB3cml0ZXMgdGhlIElDIGV4
cGVjdHMKKyAgICAgICAgYSBKU0NlbGwgYXMgdGhlIGNhbGxlZS4gVGhpcyBpcyBrbm93aW5nbHkg
cGFydCBvZiBvdXIgZGVzaWduLiBXaGVuIHdlCisgICAgICAgIGRvIHN0cnVjdHVyZWQgY2xvbmlu
ZyBvZiBXYXNtIE1vZHVsZXMsIHdlJ2xsIG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGVzZQorICAgICAg
ICBKUyBjYWxsIHN0dWJzLgorCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChCYWNrdHJhY2VGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y3VycmVudERlYnVn
Z2VyQ2FsbEZyYW1lKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZTo6RGVidWdnZXJDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZTo6aXNBbnlXYXNtQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lOjpjYWxsZXJTb3VyY2VPcmlnaW4pOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFt
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlZUFzVmFsdWUpOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmpzQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxs
ZWUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuc2FmZUNhbGxlZSk6CisgICAgICAgIChK
U0M6OkV4ZWNTdGF0ZTo6c2NvcGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Oml0ZXJhdGUp
OgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxlZUJpdHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNhbGxlZUJpdHM6OkNhbGxlZUJpdHMpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjpv
cGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjppc1dhc20pOgorICAgICAgICAo
SlNDOjpDYWxsZWVCaXRzOjppc0NlbGwpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjphc0Nl
bGwpOgorICAgICAgICAoSlNDOjpDYWxsZWVCaXRzOjphc1dhc21DYWxsZWUpOgorICAgICAgICAo
SlNDOjpDYWxsZWVCaXRzOjpyYXdQdHIpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0U3RhY2tUcmFjZUZ1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Z2V0U3RhY2tUcmFjZSk6CisgICAgICAgIChK
U0M6Om5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5j
dG9yOjpVbndpbmRGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6VW53aW5kRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
dW53aW5kKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNl
cHRpb25Ub0JlVGhyb3duKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVy
Ojpwb2ludGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2hhZG93Q2hpY2tlbjo6dXBkYXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9TaGFkb3dDaGlja2VuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpp
dGVyYXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpTdGFja1Zpc2l0b3I6OlN0YWNrVmlzaXRvcik6CisgICAgICAgIChKU0M6OlN0YWNr
VmlzaXRvcjo6cmVhZEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkTm9u
SW5saW5lZEZyYW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZy
YW1lKToKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSk6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmR1bXApOgorICAgICAgICAqIGlu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZy
YW1lOjpjYWxsZWUpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnZpc2l0KToKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAo
SlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAo
Y2FsbFdhc21GdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6YWRkRXJy
b3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aXNB
bnlXYXNtQ2FsbGVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OnZtKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpS
ZXRyaWV2ZUFyZ3VtZW50c0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpSZXRy
aWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6OnJlY29yZEpTRnJhbWUpOgorICAgICAg
ICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToK
KyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6VW5wcm9jZXNzZWRTdGFja0ZyYW1lOjpVbnByb2Nlc3NlZFN0YWNrRnJh
bWUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OlN0
YWNrRnJhbWU6OnNvdXJjZVVSTCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmZ1bmN0aW9u
TmFtZSk6CisgICAgICAgICogcnVudGltZS9TdGFja0ZyYW1lLmg6CisgICAgICAgIChKU0M6OlN0
YWNrRnJhbWU6Ondhc20pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5n
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAgICAgICogd2FzbS9X
YXNtQ2FsbGVlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAuCisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNh
bGxlZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlz
aENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6
ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5Q2FsbGVlOjplbnRyeXBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUNhbGxlZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtQ29udGV4dC5oOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgor
ICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAg
ICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNl
cHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNt
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp3YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzZXRKU0VudHJ5cG9p
bnRDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpzZXRXYXNt
RW50cnlwb2ludENhbGxlZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
Om9mZnNldE9mSW1wb3J0U3R1YnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmltcG9ydFdhc21Ub0pTU3R1Yik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrOjpvZmZzZXRPZkNhbGxlZXMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ci5jcHA6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
OjpXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlv
bjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2FzbUVudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0VudHJ5cG9pbnQpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlQb2ludENvZGUp
OiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKwogMjAxNy0wNC0wMyAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGluY29ycmVjdCBjYXBh
Y2l0eSBkZWx0YSBjYWxjdWxhdGlvbiByZXBvcnRlZCBpbiBTcGFyc2VBcnJheVZhbHVlTWFwOjph
ZGQoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIx
NDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtOTM2LDYgKzkzNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
d2FzbS9KU1dlYkFzc2VtYmx5LmNwcAogICAgIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCiAg
ICAgd2FzbS9XYXNtQmluZGluZy5jcHAKKyAgICB3YXNtL1dhc21DYWxsZWUuY3BwCiAgICAgd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwCiAgICAgd2FzbS9XYXNtQ29udGV4dC5jcHAKICAg
ICB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC05NTEsNyArOTUyLDYgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL1dhc21WYWxpZGF0ZS5jcHAKICAgICB3
YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAotICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5j
cHAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCiAgICAgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw2IEBACiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKQEAgLTc1LDYgKzc0LDcg
QEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMu
aCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgpAQCAtMzE1Nyw3ICszMTU3LDcgQEAgc3Rh
dGljIEpTVmFsdWUgYm94KEV4ZWNTdGF0ZSogZXhlYywgVk0mIAogfQogCiAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODU4Mi4KLXN0YXRpYyBKU1Zh
bHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlLCBjb25zdCBBcmdMaXN0JiBib3hlZEFy
Z3MpCitzdGF0aWMgSlNWYWx1ZSBjYWxsV2FzbUZ1bmN0aW9uKFZNKiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgV2FzbTo6Q2FsbGVlKiB3YXNtQ2FsbGVlLCBjb25zdCBBcmdMaXN0
JiBib3hlZEFyZ3MpCiB7CiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwogICAgIGludCBhcmdD
b3VudCA9IDE7CkBAIC0zMjAyLDE1ICszMjAyLDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmMKICAgICBpZiAocGxhbi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkg
IT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAotICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGNhbGxlZXM7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIga2VlcEFsaXZlOworICAg
IFZlY3RvcjxSZWY8V2FzbTo6Q2FsbGVlPj4ganNFbnRyeXBvaW50Q2FsbGVlczsKKyAgICBWZWN0
b3I8UmVmPFdhc206OkNhbGxlZT4+IHdhc21FbnRyeXBvaW50Q2FsbGVlczsKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IFVJTlRfTUFYOwogICAgICAgICBwbGFuLT5pbml0aWFs
aXplQ2FsbGVlcygKLSAgICAgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVl
SW5kZXgsIFJlZjxXYXNtOjpDYWxsZWU+JiYganNFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6
Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWNhbGxlZUluZGV4IHx8IChjYWxsZWVJbmRleCAtIDEgPT0gbGFzdEluZGV4KSk7
Ci0gICAgICAgICAgICAgICAgY2FsbGVlcy5hcHBlbmQoanNFbnRyeXBvaW50Q2FsbGVlKTsKLSAg
ICAgICAgICAgICAgICBrZWVwQWxpdmUuYXBwZW5kKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKKyAg
ICAgICAgICAgICAgICBqc0VudHJ5cG9pbnRDYWxsZWVzLmFwcGVuZChXVEZNb3ZlKGpzRW50cnlw
b2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgIHdhc21FbnRyeXBvaW50Q2FsbGVlcy5hcHBl
bmQoV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIGxhc3RJ
bmRleCA9IGNhbGxlZUluZGV4OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzIzOCw3ICsz
MjM4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAg
ICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0OwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgICAgICBj
YWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94ZWRB
cmdzKTsKKyAgICAgICAgICAgICAgICBjYWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNFbnRyeXBvaW50Q2FsbGVlc1tpXS5wdHIo
KSwgYm94ZWRBcmdzKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJv
eChleGVjLCB2bSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDkgKzI2MCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChtX3JlbWFpbmluZ0NhcGFjaXR5Rm9yRnJhbWVDYXB0dXJl
KSB7CiAgICAgICAgICAgICAvLyBJZiBjYWxsZWUgaXMgdW5rbm93biwgYnV0IHdlJ3ZlIG5vdCBh
ZGRlZCBhbnkgZnJhbWUgeWV0LCB3ZSBzaG91bGQKICAgICAgICAgICAgIC8vIHN0aWxsIGFkZCB0
aGUgZnJhbWUsIGJlY2F1c2Ugc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUgdXMgYXJndW1l
bnRzLgotICAgICAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNpdG9yLT5jYWxsZWUoKTsKLSAg
ICAgICAgICAgIGlmICghY2FsbGVlICYmIHZpc2l0b3ItPmluZGV4KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5j
YWxsZWUoKS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdmlz
aXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWUgJiYg
dmlzaXRvci0+aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6RG9uZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciYgYnVp
bGRlciA9IG1fYnVpbGRlcjsKICAgICAgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCkBA
IC0yODEsNyArMjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TnVtYmVyKGxpbmVOdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWNh
bGxlZSkKKyAgICAgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkucmF3UHRyKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAogICAgICAgICAgICAgbV9y
ZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzE0LDYgKzEzMTQsOCBAQAogCQk0NzNEQTRBNDc2NEM0NUZFODcxQjA0ODUgLyogRGVmaW5l
UHJvcGVydHlBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5lUHJvcGVydHlBdHRy
aWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTI1MEQyRDExRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI1MEQyQ0YxRThEQTA1QTAwMjlB
OTMyIC8qIFdhc21UaHVua3MuY3BwICovOyB9OwogCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIg
LyogV2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTI1MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MjVDMEREOTFFOTM1ODQ3
MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MjVDMERENzFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5j
cHAgKi87IH07CisJCTUyNUMwRERBMUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjVDMEREODFFOTM1
ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjhFMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Js
b2NrTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAg
Ki87IH07CiAJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjc4RjhE
MUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOTAxQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93
UHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTQ5OCw2ICsxNTAwLDcgQEAKIAkJNzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdl
dFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2NUMyMTYxRTVENzk5NjAwQjc1
OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjVDMjE0MUU1RDc5OTYwMEI3
NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi87IH07CiAJ
CTc5NjVDMjE3MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Nzk2NUMyMTUxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENv
bG9yaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzk2REFBMkIxRTg5Q0NENjAwNURGMjRBIC8qIENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkRBQTJBMUU4OUNDRDYwMDVERjI0
QSAvKiBDYWxsZWVCaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxw
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTZG
QjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFCOEZDRkI5
MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJB
IC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJNzk3RTA3QUExQjhG
Q0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTUyOSw4ICsxNTMyLDYgQEAKIAkJNzlENUNE
NUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAv
KiBTYW1wbGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25U
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURB
RTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgfTsKIAkJNzlE
RkNCREIxRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUy
N0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlFNDIzRTIxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2Vi
QXNzZW1ibHlDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUu
Y3BwICovOyB9OwotCQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNh
bGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlF
NDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEJGRjFCNEFGQjg1
MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFy
aWFibGVFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAv
KiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUY4
RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
ICovOyB9OwpAQCAtMzgxOSw2ICszODIwLDggQEAKIAkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFC
IC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7
IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OwogCQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGh1bmtzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI1MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRodW5rcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjVDMERENzFFOTM1ODQ3MDAyMTg0Q0QgLyogV2Fz
bUNhbGxlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2Fs
bGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI1QzBERDgxRTkzNTg0NzAw
MjE4NENEIC8qIFdhc21DYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbUNhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3OEY4QzFBMDMx
MDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2ljQmxvY2tMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyNjc4RjhEMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9j
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzaWNCbG9ja0xvY2F0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjc4RjkwMUEwNDE3N0MwMDZB
MzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbnRyb2xGbG93UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQwNDYsNiArNDA0OSw3IEBACiAJCTc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQ
dXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldFB1dEluZm8uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8q
IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5n
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkx
RCAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NkRBQTJBMUU4OUNDRDYwMDVERjI0QSAvKiBD
YWxsZWVCaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxlZUJpdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2RkI0MzkxREZGOEMzRjAwMzlDOTVE
IC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5SGVscGVy
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQwNzcsOCArNDA4MSw2IEBACiAJCTc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1w
bGluZ1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5n
UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlEQUUyNzkxRTAzQzgy
MjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdhc21FeGNlcHRpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpT
V2ViQXNzZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlFNDIzRTExREVFNjUzMjAwNzhE
MzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNhbGxl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIg
LyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU3NDEsNiArNTc0Myw3IEBACiAJCQkJMEY1NUYwRjExNEQxMDYzNjAw
QUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwICovLAogCQkJCTBGNTVGMEYyMTREMTA2MzYwMEFDNzY0
OSAvKiBBYnN0cmFjdFBDLmggKi8sCiAJCQkJQTdGODY5MEUwRjk1ODRBMTAwNTU4Njk3IC8qIENh
Y2hlZENhbGwuaCAqLywKKwkJCQk3OTZEQUEyQTFFODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0
cy5oICovLAogCQkJCTE0MjlEOERCMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwICov
LAogCQkJCTE0MjlEOERDMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCAqLywKIAkJCQlB
N0Y4NjlFQzBGOTVDMkVDMDA1NTg2OTcgLyogQ2FsbEZyYW1lQ2xvc3VyZS5oICovLApAQCAtNjMw
NCw2ICs2MzA3LDggQEAKIAkJCQk1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJH
ZW5lcmF0b3IuaCAqLywKIAkJCQlBRDRCMURGNzFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRp
bmcuY3BwICovLAogCQkJCUFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5o
ICovLAorCQkJCTUyNUMwREQ3MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLywK
KwkJCQk1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5oICovLAogCQkJCTUz
RkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAog
CQkJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAq
LywKIAkJCQlBRDQxMkIzMTFFN0IyRThBMDA4QUYxNTcgLyogV2FzbUNvbnRleHQuY3BwICovLApA
QCAtNzkzNCw4ICs3OTM5LDYgQEAKIAkJQUQyRkNCOEExREI1ODQwMDAwQjNFNzM2IC8qIGpzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3OUU0MjNFMDFE
RUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCi0JCQkJNzlFNDIz
RTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKIAkJCQk1Mzgz
QUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJ
CQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAq
LywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAgKi8sCkBAIC04NzI0LDYgKzg3MjcsNyBAQAogCQkJCUE1RUE3MTA5MTlGNkRFN0Mw
MDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1
RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5w
eSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA3MTlGNkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
CisJCQkJNTI1QzBEREExRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5MERBNjdGMUM4RTMxNkEwMDI5NTE1OSAvKiBnZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKIAkJ
CQlDNEY0QjZGNTFBMDVDOTg0MDA1Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0NzAzQ0Q2MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKQEAgLTg4NjUsNiArODg2OSw3
IEBACiAJCQkJNzlCMTc4OEUxRDM5OUI4MDAwQjFBNTY3IC8qIEpJVE1hdGhJQ0ZvcndhcmRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElD
SW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJC
Q0EgLyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTZEQUEyQjFFODlD
Q0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5OUIyNDkx
QzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTkwMzEsNyArOTAzNiw2IEBACiAJCQkJQTc0ODJCOTMxMTY3
MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggaW4g
SGVhZGVycyAqLywKLQkJCQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJs
eUNhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1OERBRDAwQjNFNzM2IC8q
IEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5NkZCNDNB
MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMDU5OSw3ICsxMDYwMyw2IEBACiAJCQkJQTc0ODJCOTQxMTY3
MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBRDJGQ0MzMDFEQjgzRDQ5MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk3OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJB
c3NlbWJseUNhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JFMjFEQjU4REFEMDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBRDJGQ0JFNDFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUFERTgwMjk4MUUwOEYxREUwMDU4REU3OCAvKiBKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA3MjIsNiArMTA3MjUsNyBAQAog
CQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTI1QzBERDkxRTkzNTg0NzAwMjE4NENEIC8qIFdh
c21DYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0Iy
IC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUx
QzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgRGVidWdn
ZXI6OnVwZGF0ZUNhbGxGcmFtZUludGVybmFsKEMKIAogdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5l
ZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZt
KCk7CisgICAgVk0mIHZtID0gbV92bTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBpZiAobV9pc1BhdXNlZCkKQEAgLTcwNiwxMSArNzA2LDExIEBAIHZv
aWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiAKICAgICBwYXVzZU5vdyB8PSAo
bV9wYXVzZU9uQ2FsbEZyYW1lID09IG1fY3VycmVudENhbGxGcmFtZSk7CiAKICAgICBib29sIGRp
ZFBhdXNlRm9yU3RlcCA9IHBhdXNlTm93OwotICAgIGJvb2wgZGlkSGl0QnJlYWtwb2ludCA9IGZh
bHNlOwogCiAgICAgQnJlYWtwb2ludCBicmVha3BvaW50OwotICAgIFRleHRQb3NpdGlvbiBwb3Np
dGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlvbkZvckNhbGxGcmFtZShtX2N1cnJlbnRD
YWxsRnJhbWUpOwotICAgIHBhdXNlTm93IHw9IGRpZEhpdEJyZWFrcG9pbnQgPSBoYXNCcmVha3Bv
aW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9pbnQpOworICAgIFRleHRQb3NpdGlvbiBw
b3NpdGlvbiA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlvbkZvckNhbGxGcmFtZSh2bSwgbV9j
dXJyZW50Q2FsbEZyYW1lKTsKKyAgICBib29sIGRpZEhpdEJyZWFrcG9pbnQgPSBoYXNCcmVha3Bv
aW50KHNvdXJjZUlELCBwb3NpdGlvbiwgJmJyZWFrcG9pbnQpOworICAgIHBhdXNlTm93IHw9IGRp
ZEhpdEJyZWFrcG9pbnQ7CiAgICAgbV9sYXN0RXhlY3V0ZWRMaW5lID0gcG9zaXRpb24ubV9saW5l
Lnplcm9CYXNlZEludCgpOwogICAgIGlmICghcGF1c2VOb3cpCiAgICAgICAgIHJldHVybjsKQEAg
LTcyMSw3ICs3MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSog
CiAgICAgLy8gcmVzZXRpbmcgdGhlIHBhdXNlIHN0YXRlIGJlZm9yZSBleGVjdXRpbmcgYW55IGJy
ZWFrcG9pbnQgYWN0aW9ucy4KICAgICBUZW1wb3JhcnlQYXVzZWRTdGF0ZSBwYXVzZWRTdGF0ZSgq
dGhpcyk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCA9IGNhbGxG
cmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KHZtKTsKIAogICAg
IGlmIChkaWRIaXRCcmVha3BvaW50KSB7CiAgICAgICAgIGhhbmRsZUJyZWFrcG9pbnRIaXQodm1F
bnRyeUdsb2JhbE9iamVjdCwgYnJlYWtwb2ludCk7CkBAIC05MTYsNyArOTE2LDcgQEAgdm9pZCBE
ZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxGcgogRGVidWdnZXJDYWxsRnJhbWUmIERl
YnVnZ2VyOjpjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKQogewogICAgIGlmICghbV9jdXJyZW50
RGVidWdnZXJDYWxsRnJhbWUpCi0gICAgICAgIG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lID0g
RGVidWdnZXJDYWxsRnJhbWU6OmNyZWF0ZShtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgICAgICBt
X2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZSA9IERlYnVnZ2VyQ2FsbEZyYW1lOjpjcmVhdGUobV92
bSwgbV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICByZXR1cm4gKm1fY3VycmVudERlYnVnZ2VyQ2Fs
bEZyYW1lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDE2ICs2MCwxNiBAQCBwcml2YXRlOgogICAgIG11dGFibGUgdW5zaWduZWQgbV9j
b2x1bW47CiB9OwogCi1SZWY8RGVidWdnZXJDYWxsRnJhbWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpj
cmVhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitSZWY8RGVidWdnZXJDYWxsRnJhbWU+IERlYnVn
Z2VyQ2FsbEZyYW1lOjpjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lID09IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZSA9PSBjYWxs
RnJhbWUtPndhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3Qodm0pLT5nbG9iYWxFeGVjKCkpKSB7
CiAgICAgICAgIFNoYWRvd0NoaWNrZW46OkZyYW1lIGVtcHR5RnJhbWU7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFlbXB0eUZyYW1lLmlzVGFpbERlbGV0ZWQpOwotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEZWJ1Z2dlckNhbGxGcmFtZShjYWxsRnJhbWUsIGVtcHR5RnJhbWUpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVidWdnZXJDYWxsRnJhbWUodm0sIGNhbGxGcmFt
ZSwgZW1wdHlGcmFtZSkpOwogICAgIH0KIAogICAgIFZlY3RvcjxTaGFkb3dDaGlja2VuOjpGcmFt
ZT4gZnJhbWVzOwotICAgIGNhbGxGcmFtZS0+dm0oKS5zaGFkb3dDaGlja2VuKCkuaXRlcmF0ZShj
YWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZSwgWyZdIChjb25zdCBTaGFkb3dDaGlja2VuOjpGcmFt
ZSYgZnJhbWUpIC0+IGJvb2wgeworICAgIHZtLnNoYWRvd0NoaWNrZW4oKS5pdGVyYXRlKHZtLCBj
YWxsRnJhbWUsIFsmXSAoY29uc3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmIGZyYW1lKSAtPiBib29s
IHsKICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0pOwpAQCAtNzgsMjQgKzc4LDI0IEBAIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdn
ZXJDYWxsRnJhbWUKICAgICBBU1NFUlQoIWZyYW1lc1swXS5pc1RhaWxEZWxldGVkKTsgLy8gVGhl
IHRvcCBmcmFtZSBzaG91bGQgbmV2ZXIgYmUgdGFpbCBkZWxldGVkLgogCiAgICAgUmVmUHRyPERl
YnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50UGFyZW50ID0gbnVsbHB0cjsKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNhbGxGcmFtZS0+d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9i
amVjdCh2bSktPmdsb2JhbEV4ZWMoKTsKICAgICAvLyBUaGlzIHdhbGtzIHRoZSBzdGFjayBmcm9t
IHRoZSBlbnRyeSBzdGFjayBmcmFtZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBmcmFtZXMuc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBjb25zdCBTaGFk
b3dDaGlja2VuOjpGcmFtZSYgZnJhbWUgPSBmcmFtZXNbaV07CiAgICAgICAgIGlmICghZnJhbWUu
aXNUYWlsRGVsZXRlZCkKICAgICAgICAgICAgIGV4ZWMgPSBmcmFtZS5mcmFtZTsKLSAgICAgICAg
UmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50RnJhbWUgPSBhZG9wdFJlZigqbmV3IERlYnVn
Z2VyQ2FsbEZyYW1lKGV4ZWMsIGZyYW1lKSk7CisgICAgICAgIFJlZjxEZWJ1Z2dlckNhbGxGcmFt
ZT4gY3VycmVudEZyYW1lID0gYWRvcHRSZWYoKm5ldyBEZWJ1Z2dlckNhbGxGcmFtZSh2bSwgZXhl
YywgZnJhbWUpKTsKICAgICAgICAgY3VycmVudEZyYW1lLT5tX2NhbGxlciA9IGN1cnJlbnRQYXJl
bnQ7CiAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBXVEZNb3ZlKGN1cnJlbnRGcmFtZSk7CiAgICAg
fQogICAgIHJldHVybiAqY3VycmVudFBhcmVudDsKIH0KIAotRGVidWdnZXJDYWxsRnJhbWU6OkRl
YnVnZ2VyQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBTaGFkb3dDaGlja2Vu
OjpGcmFtZSYgZnJhbWUpCitEZWJ1Z2dlckNhbGxGcmFtZTo6RGVidWdnZXJDYWxsRnJhbWUoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmIGZy
YW1lKQogICAgIDogbV92YWxpZE1hY2hpbmVGcmFtZShjYWxsRnJhbWUpCiAgICAgLCBtX3NoYWRv
d0NoaWNrZW5GcmFtZShmcmFtZSkKIHsKLSAgICBtX3Bvc2l0aW9uID0gY3VycmVudFBvc2l0aW9u
KCk7CisgICAgbV9wb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbih2bSk7CiB9CiAKIFJlZlB0cjxE
ZWJ1Z2dlckNhbGxGcmFtZT4gRGVidWdnZXJDYWxsRnJhbWU6OmNhbGxlckZyYW1lKCkKQEAgLTI4
NCw3ICsyODQsNyBAQCB2b2lkIERlYnVnZ2VyQ2FsbEZyYW1lOjppbnZhbGlkYXRlKCkKICAgICB9
CiB9CiAKLVRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKCkK
K1RleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3VycmVudFBvc2l0aW9uKFZNJiB2bSkK
IHsKICAgICBpZiAoIW1fdmFsaWRNYWNoaW5lRnJhbWUpCiAgICAgICAgIHJldHVybiBUZXh0UG9z
aXRpb24oKTsKQEAgLTI5NywxMyArMjk3LDEzIEBAIFRleHRQb3NpdGlvbiBEZWJ1Z2dlckNhbGxG
cmFtZTo6Y3VycmVudFAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBwb3NpdGlvbkZv
ckNhbGxGcmFtZShtX3ZhbGlkTWFjaGluZUZyYW1lKTsKKyAgICByZXR1cm4gcG9zaXRpb25Gb3JD
YWxsRnJhbWUodm0sIG1fdmFsaWRNYWNoaW5lRnJhbWUpOwogfQogCi1UZXh0UG9zaXRpb24gRGVi
dWdnZXJDYWxsRnJhbWU6OnBvc2l0aW9uRm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1l
KQorVGV4dFBvc2l0aW9uIERlYnVnZ2VyQ2FsbEZyYW1lOjpwb3NpdGlvbkZvckNhbGxGcmFtZShW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIExpbmVBbmRDb2x1bW5GdW5jdG9y
IGZ1bmN0b3I7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIFN0YWNrVmlz
aXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgIHJldHVybiBUZXh0UG9z
aXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGZ1bmN0b3IubGluZSgpKSwgT3Jk
aW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGZ1bmN0b3IuY29sdW1uKCkpKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNs
YXNzIERlYnVnZ2VyQ2FsbEZyYW1lIDogcHVibGljIFJlZkNvdW4KIHB1YmxpYzoKICAgICBlbnVt
IFR5cGUgeyBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07CiAKLSAgICBzdGF0aWMgUmVmPERl
YnVnZ2VyQ2FsbEZyYW1lPiBjcmVhdGUoQ2FsbEZyYW1lKik7CisgICAgc3RhdGljIFJlZjxEZWJ1
Z2dlckNhbGxGcmFtZT4gY3JlYXRlKFZNJiwgQ2FsbEZyYW1lKik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+IGNhbGxlckZyYW1lKCk7CiAgICAgRXhl
Y1N0YXRlKiBnbG9iYWxFeGVjKCk7CkBAIC02OSwxNCArNjksMTQgQEAgcHVibGljOgogICAgIC8v
IFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgcHVibGljIGZvciB0aGUgRGVidWdnZXIncyB1c2Ugb25s
eS4gVGhleSB3aWxsIGJlCiAgICAgLy8gbWFkZSBwcml2YXRlIHNvb24uIE90aGVyIGNsaWVudHMg
c2hvdWxkIG5vdCB1c2UgdGhlc2UuCiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBUZXh0UG9zaXRp
b24gY3VycmVudFBvc2l0aW9uKCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRleHRQ
b3NpdGlvbiBwb3NpdGlvbkZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBUZXh0UG9zaXRpb24gY3VycmVudFBvc2l0aW9uKFZNJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFRleHRQb3NpdGlvbiBwb3NpdGlvbkZvckNhbGxGcmFtZShWTSYsIENh
bGxGcmFtZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTb3VyY2VJRCBzb3VyY2VJ
REZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAogICAgIGJvb2wgaXNUYWlsRGVsZXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93Q2hpY2tlbkZyYW1lLmlzVGFpbERlbGV0ZWQ7IH0KIAogcHJp
dmF0ZToKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZShDYWxsRnJhbWUqLCBjb25zdCBTaGFkb3dDaGlj
a2VuOjpGcmFtZSYpOworICAgIERlYnVnZ2VyQ2FsbEZyYW1lKFZNJiwgQ2FsbEZyYW1lKiwgY29u
c3QgU2hhZG93Q2hpY2tlbjo6RnJhbWUmKTsKIAogICAgIENhbGxGcmFtZSogbV92YWxpZE1hY2hp
bmVGcmFtZTsKICAgICBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+IG1fY2FsbGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJl
dmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVNj
b3BlLmgiCisjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xODUsNyArMTg2LDggQEAgUmVnaXN0
ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKAogCiBKU0dsb2JhbE9iamVjdCogQ2Fs
bEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0KCkKIHsKLSAgICBpZiAoY2FsbGVlKCktPmlzT2Jq
ZWN0KCkpIHsgCisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKCkuaXNDZWxsKCkpOworICAgIGlm
IChjYWxsZWUoKS5hc0NlbGwoKS0+aXNPYmplY3QoKSkgeyAKICAgICAgICAgaWYgKHRoaXMgPT0g
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpCiAgICAgICAgICAgICByZXR1cm4g
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIH0KQEAgLTE5Nyw2ICsxOTksNDQgQEAgSlNHbG9i
YWxPYmplY3QqIENhbGxGcmFtZTo6dm1FbnRyeUdsb2JhbAogICAgIHJldHVybiB2bSgpLmVudHJ5
U2NvcGUtPmdsb2JhbE9iamVjdCgpOwogfQogCitKU0dsb2JhbE9iamVjdCogQ2FsbEZyYW1lOjp2
bUVudHJ5R2xvYmFsT2JqZWN0KFZNJiB2bSkKK3sKKyAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkg
JiYgY2FsbGVlKCkuYXNDZWxsKCktPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHRoaXMgPT0g
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpCisgICAgICAgICAgICByZXR1cm4g
bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIH0KKworICAgIC8vIEZvciBhbnkgRXhlY1N0YXRl
IHRoYXQncyBub3QgYSBnbG9iYWxFeGVjLCB0aGUgCisgICAgLy8gZHluYW1pYyBnbG9iYWwgb2Jq
ZWN0IG11c3QgYmUgc2V0IHNpbmNlIGNvZGUgaXMgcnVubmluZworICAgIEFTU0VSVCh2bS5lbnRy
eVNjb3BlKTsKKyAgICByZXR1cm4gdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCk7Cit9CisK
K0pTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3Qo
Vk0mIHZtKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSgpLmlz
V2FzbSgpKQorICAgICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVy
biBXYXNtOjpsb2FkQ29udGV4dCh2bSktPmdsb2JhbE9iamVjdCgpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odm0pOworICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisjZW5kaWYK
K30KKworYm9vbCBDYWxsRnJhbWU6OmlzQW55V2FzbUNhbGxlZSgpCit7CisgICAgQ2FsbGVlQml0
cyBjYWxsZWUgPSB0aGlzLT5jYWxsZWUoKTsKKyAgICBpZiAoY2FsbGVlLmlzV2FzbSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEFTU0VSVChjYWxsZWUuaXNDZWxsKCkpOworICAgIGlm
ICghIWNhbGxlZS5yYXdQdHIoKSAmJiBpc1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZWUuYXND
ZWxsKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwog
Q2FsbEZyYW1lKiBDYWxsRnJhbWU6OmNhbGxlckZyYW1lKFZNRW50cnlGcmFtZSomIGN1cnJWTUVu
dHJ5RnJhbWUpCiB7CiAgICAgaWYgKGNhbGxlckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSBjdXJy
Vk1FbnRyeUZyYW1lKSB7CkBAIC0yMTksOSArMjU5LDExIEBAIFNVUFBSRVNTX0FTQU4gQ2FsbEZy
YW1lKiBDYWxsRnJhbWU6OnVuc2EKIAogU291cmNlT3JpZ2luIENhbGxGcmFtZTo6Y2FsbGVyU291
cmNlT3JpZ2luKCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7Cisg
ICAgVk0qIHZtID0gJnRoaXMtPnZtKCk7CiAgICAgU291cmNlT3JpZ2luIHNvdXJjZU9yaWdpbjsK
ICAgICBib29sIGhhdmVTa2lwcGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIFN0YWNrVmlzaXRv
cjo6dmlzaXQodGhpcywgWyZdKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgeworICAgIFN0YWNrVmlz
aXRvcjo6dmlzaXQodGhpcywgdm0sIFsmXShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAg
ICAgaWYgKCFzdGQ6OmV4Y2hhbmdlKGhhdmVTa2lwcGVkRmlyc3RGcmFtZSwgdHJ1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpTdGF0dXM6OkNvbnRpbnVlOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lv
biAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQWJzdHJhY3RQQy5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUg
IlN0YWNrVmlzaXRvci5oIgpAQCAtODYsMTAgKzg3LDE4IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJz
ID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCArIDE7CiAKLSAgICAgICAgSlNWYWx1ZSBj
YWxsZWVBc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVd
LmpzVmFsdWUoKTsgfQotICAgICAgICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdCB7IHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7IH0KLSAgICAgICAgSlNDZWxs
KiBjYWxsZWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0udW5i
b3hlZENlbGwoKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIEpTVmFsdWUgdW5zYWZlQ2FsbGVl
KCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVK
U1ZhbHVlKCk7IH0KKyAgICAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFsdWUoKTsKKyAgICAgICAg
fQorICAgICAgICBKU09iamVjdCoganNDYWxsZWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
W0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgQ2Fs
bGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVl
Qml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVyKCkpOyB9CiAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lz
dGVyOjpjb2RlQmxvY2soKTsgfQogICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNzT2ZDb2RlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRoaXMgKyBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOyB9CiAgICAgICAgIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2Nr
KiB1bnNhZmVDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9ja10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsgfQpAQCAtOTgsOSArMTA3
LDE1IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIEFTU0VSVCh0aGlzW3Njb3BlUmVn
aXN0ZXJPZmZzZXRdLlJlZ2lzdGVyOjpzY29wZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0aGlz
W3Njb3BlUmVnaXN0ZXJPZmZzZXRdLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgICAgICB9Ci0KICAg
ICAgICAgLy8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCisgICAgICAg
IC8vIFRoaXMgdmFyaWFudCBpcyBub3Qgc2FmZSB0byBjYWxsIGZyb20gYSBXYXNtIGZyYW1lLgog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9i
amVjdCgpOworICAgICAgICAvLyBUaGlzIHZhcmlhbnQgaXMgc2FmZSB0byBjYWxsIGZyb20gYSBX
YXNtIGZyYW1lLgorICAgICAgICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdChW
TSYpOworCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiB3YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2Jq
ZWN0KFZNJik7CisKKyAgICAgICAgYm9vbCBpc0FueVdhc21DYWxsZWUoKTsKIAogICAgICAgICAv
LyBHbG9iYWwgb2JqZWN0IGluIHdoaWNoIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNvZGUgd2Fz
IGRlZmluZWQuCiAgICAgICAgIC8vIERpZmZlcnMgZnJvbSB2bUVudHJ5R2xvYmFsT2JqZWN0KCkg
ZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCkBAIC0yNTcs
OSArMjcyLDE3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gICAgIFN0YWNrVmlzaXRv
cjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJikgY29uc3Q7CiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBpcyBpbXByb3Blci4gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdl
IGNhbiBjYWxsIGl0IHdpdGggYSBudWxsCiAgICAgICAgIC8vIHJlY2VpdmVyLiBXZSBzaG91bGQg
YWx3YXlzIGJlIHVzaW5nIFN0YWNrVmlzaXRvciBkaXJlY3RseS4KKyAgICAgICAgLy8gSXQncyBv
bmx5IHZhbGlkIHRvIGNhbGwgdGhpcyBmcm9tIGEgbm9uLXdhc20gdG9wIGZyYW1lLgogICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVu
Y3Rvcj4odGhpcywgZnVuY3Rvcik7CisgICAgICAgICAgICBWTSogdm07CisgICAgICAgICAgICB2
b2lkKiByYXdUaGlzID0gdGhpczsKKyAgICAgICAgICAgIGlmICghIXJhd1RoaXMpIHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUoKS5pc0NlbGwoKSk7CisgICAgICAgICAg
ICAgICAgdm0gPSAmdGhpcy0+dm0oKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHZtID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQ8RnVuY3Rv
cj4odGhpcywgdm0sIGZ1bmN0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bGVlQml0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsZWVCaXRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxlZUJpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitu
YW1lc3BhY2UgV2FzbSB7CitjbGFzcyBDYWxsZWU7Cit9CisKK2NsYXNzIEpTQ2VsbDsKKworY2xh
c3MgQ2FsbGVlQml0cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgd2FzbVRhZyA9
IDE7CitwdWJsaWM6CisgICAgQ2FsbGVlQml0cygpID0gZGVmYXVsdDsKKyAgICBDYWxsZWVCaXRz
KHZvaWQqIHB0cikgOiBtX3B0cihwdHIpIHsgfSAKKworICAgIENhbGxlZUJpdHMmIG9wZXJhdG9y
PShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBtX3B0ciA9IGNlbGw7CisgICAgICAgIEFT
U0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCogYm94V2FzbShXYXNtOjpDYWxsZWUqIGNhbGxlZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiB3YXNtVGFnKSk7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNh
bGxlZSkgfCB3YXNtVGFnKTsKKyAgICB9CisKKyAgICBib29sIGlzV2FzbSgpIGNvbnN0IHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHRyKSAmIHdhc21UYWc7IH0KKyAgICBib29s
IGlzQ2VsbCgpIGNvbnN0IHsgcmV0dXJuICFpc1dhc20oKTsgfQorCisgICAgSlNDZWxsKiBhc0Nl
bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1dhc20oKSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPihtX3B0cik7CisgICAgfQorCisgICAgV2FzbTo6Q2Fs
bGVlKiBhc1dhc21DYWxsZWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzV2FzbSgp
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXYXNtOjpDYWxsZWUqPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihtX3B0cikgJiB+d2FzbVRhZyk7CisgICAgfQorCisgICAgdm9pZCogcmF3
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCog
bV9wdHIgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTQgQEAgcHVibGljOgog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1
cmUpIHsKLSAgICAgICAgICAgIGlmICghdmlzaXRvci0+aXNXYXNtRnJhbWUoKQotICAgICAgICAg
ICAgICAgICYmICEhdmlzaXRvci0+Y29kZUJsb2NrKCkKLSAgICAgICAgICAgICAgICAmJiAhdmlz
aXRvci0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQnVpbHRpbkZ1bmN0aW9u
KCkpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKQorICAgICAgICAg
ICAgICAgIG1fcmVzdWx0cy5hcHBlbmQoU3RhY2tGcmFtZTo6d2FzbSgpKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCEhdmlzaXRvci0+Y29kZUJsb2NrKCkgJiYgIXZpc2l0b3ItPmNvZGVCbG9jaygp
LT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAg
ICAgICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSht
X3ZtLCB2aXNpdG9yLT5jYWxsZWUoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3ItPmJ5
dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3ZtLCB2
aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSwgdmlzaXRvci0+Y29kZUJsb2NrKCksIHZpc2l0b3It
PmJ5dGVjb2RlT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgbV9yZXN1bHRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZShtX3Zt
LCAgdmlzaXRvci0+Y2FsbGVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tGcmFtZSht
X3ZtLCB2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSkpOwogICAgICAgICAgICAgfQogICAgIAog
ICAgICAgICAgICAgbV9yZW1haW5pbmdDYXBhY2l0eUZvckZyYW1lQ2FwdHVyZS0tOwpAQCAtNTAz
LDcgKzUwMyw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFMKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IGZyYW1lc0NvdW50ID0gMDsKLSAgICBjYWxsRnJh
bWUtPml0ZXJhdGUoWyZdIChTdGFja1Zpc2l0b3ImKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7
CisgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2bSwgWyZdIChTdGFja1Zpc2l0
b3ImKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1cyB7CiAgICAgICAgIGZyYW1lc0NvdW50Kys7CiAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgIH0pOwpAQCAtNTE0LDcg
KzUxNCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmdldFN0YWNrVHJhY2UoVmVjdG9yPFMKICAgICBm
cmFtZXNDb3VudCA9IHN0ZDo6bWluKG1heFN0YWNrU2l6ZSwgZnJhbWVzQ291bnQpOwogCiAgICAg
R2V0U3RhY2tUcmFjZUZ1bmN0b3IgZnVuY3Rvcih2bSwgcmVzdWx0cywgZnJhbWVzVG9Ta2lwLCBm
cmFtZXNDb3VudCk7Ci0gICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIFN0YWNr
VmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgIEFTU0VSVChyZXN1
bHRzLnNpemUoKSA9PSByZXN1bHRzLmNhcGFjaXR5KCkpOwogfQogCkBAIC01NzUsMTMgKzU3NSwx
MyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSGFuZGxlckluZm8qIG1faGFuZGxlcjsKIH07CiAK
LUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdn
ZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2
bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKLSAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXIqIGRlYnVn
Z2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KHZtKS0+ZGVidWdnZXIoKSkgewog
ICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKLSAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpKQorICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5pc0FueVdhc21DYWxsZWUoKQorICAgICAgICAgICAgfHwgKGNh
bGxGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkgJiYgY2FsbEZyYW1lLT5jYWxsZWUoKS5hc0NlbGwo
KS0+aW5oZXJpdHModm0sIEpTRnVuY3Rpb246OmluZm8oKSkpKQogICAgICAgICAgICAgZGVidWdn
ZXItPnVud2luZEV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRl
YnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUpOwpAQCAtNTkxLDggKzU5MSw5IEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5RGVidWdnZXIKIAogY2xhc3MgVW53aW5k
RnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgVW53aW5kRnVuY3RvcihDYWxsRnJhbWUqJiBjYWxsRnJh
bWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBIYW5kbGVySW5m
byomIGhhbmRsZXIpCi0gICAgICAgIDogbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQorICAgIFVud2lu
ZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlv
biwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBIYW5kbGVySW5mbyomIGhhbmRsZXIpCisgICAgICAg
IDogbV92bSh2bSkKKyAgICAgICAgLCBtX2NhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgICAgICwg
bV9pc1Rlcm1pbmF0aW9uKGlzVGVybWluYXRpb24pCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1faGFuZGxlcihoYW5kbGVyKQpAQCAtNjE0LDcgKzYxNSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcobV9jYWxsRnJhbWUpOworICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53
aW5kaW5nKG1fdm0sIG1fY2FsbEZyYW1lKTsKIAogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwogCkBAIC02MzQsMTMgKzYzNSwx
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWN1cnJlbnRDYWxsZWVTYXZlcykKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBWTSYgdm0gPSBtX2NhbGxGcmFtZS0+dm0oKTsKICAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxl
ZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKICAgICAgICAgaW50cHRyX3Qq
IGZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdCo+KG1fY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGN1cnJlbnRDYWxsZWVT
YXZlcy0+c2l6ZSgpOwotICAgICAgICBWTUVudHJ5UmVjb3JkKiByZWNvcmQgPSB2bUVudHJ5UmVj
b3JkKHZtLnRvcFZNRW50cnlGcmFtZSk7CisgICAgICAgIFZNRW50cnlSZWNvcmQqIHJlY29yZCA9
IHZtRW50cnlSZWNvcmQobV92bS50b3BWTUVudHJ5RnJhbWUpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0IGN1cnJlbnRFbnRyeSA9IGN1cnJlbnRDYWxsZWVTYXZlcy0+YXQoaSk7CiAgICAg
ICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGN1cnJlbnRFbnRyeS5yZWcoKSkpCkBA
IC02NTQsNiArNjU0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIH0KIAorICAgIFZNJiBtX3Zt
OwogICAgIENhbGxGcmFtZSomIG1fY2FsbEZyYW1lOwogICAgIGJvb2wgbV9pc1Rlcm1pbmF0aW9u
OwogICAgIENvZGVCbG9jayomIG1fY29kZUJsb2NrOwpAQCAtNjg2LDE4ICs2ODcsMTcgQEAgTkVW
RVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogCiAgICAgLy8gQ2FsY3VsYXRl
IGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vz
c2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7Ci0gICAgVW53aW5kRnVu
Y3RvciBmdW5jdG9yKGNhbGxGcmFtZSwgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZt
LCBleGNlcHRpb24pLCBjb2RlQmxvY2ssIGhhbmRsZXIpOwotICAgIGNhbGxGcmFtZS0+aXRlcmF0
ZShmdW5jdG9yKTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pLCBjb2RlQmxvY2ssIGhh
bmRsZXIpOworICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3Ip
OwogICAgIGlmICghaGFuZGxlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1
cm4gaGFuZGxlcjsKIH0KIAotdm9pZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdnZXJPZkV4Y2Vw
dGlvblRvQmVUaHJvd24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQordm9pZCBJbnRlcnByZXRlcjo6bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24o
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0g
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNh
bGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOworICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCh2bSktPmRlYnVnZ2Vy
KCk7CiAgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVnZ2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNr
cygpICYmICFleGNlcHRpb24tPmRpZE5vdGlmeUluc3BlY3Rvck9mVGhyb3coKSkgewogICAgICAg
ICAvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGlmIHRoZSBkZWJ1Z2dlciBpcyBlbmFibGVkIHRo
ZW4gdGhlcmUgaXMgbm8gaW5saW5pbmcuCiAgICAgICAgIC8vIElmIHRoYXQgYXNzdW1wdGlvbiB0
dXJucyBvdXQgdG8gYmUgZmFsc2UgdGhlbiB3ZSdsbCBpZ25vcmUgdGhlIGlubGluZWQgY2FsbApA
QCAtNzEwLDcgKzcxMCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVnZ2VyT2ZFeGNl
cHQKICAgICAgICAgICAgIGhhc0NhdGNoSGFuZGxlciA9IGZhbHNlOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIEdldENhdGNoSGFuZGxlckZ1bmN0b3IgZnVuY3RvcjsKLSAgICAgICAgICAg
IGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICAgICAgICAgIFN0YWNrVmlzaXRvcjo6
dmlzaXQoY2FsbEZyYW1lLCAmdm0sIGZ1bmN0b3IpOwogICAgICAgICAgICAgSGFuZGxlckluZm8q
IGhhbmRsZXIgPSBmdW5jdG9yLmhhbmRsZXIoKTsKICAgICAgICAgICAgIEFTU0VSVCghaGFuZGxl
ciB8fCBoYW5kbGVyLT5pc0NhdGNoSGFuZGxlcigpKTsKICAgICAgICAgICAgIGhhc0NhdGNoSGFu
ZGxlciA9ICEhaGFuZGxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDcgKzEzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0Rh
dGEoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5k
ZXgsIFJlZ2lzdGVyKiYgYXJndiwgaW50JiBhcmdjKTsKICAgICAgICAgCiAgICAgICAgIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogdW53aW5kKFZNJiwgQ2FsbEZyYW1lKiYsIEV4Y2VwdGlvbios
IFVud2luZFN0YXJ0KTsKLSAgICAgICAgdm9pZCBub3RpZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9C
ZVRocm93bihDYWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKKyAgICAgICAgdm9pZCBub3RpZnlEZWJ1
Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYsIENhbGxGcmFtZSosIEV4Y2VwdGlvbiopOwog
ICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tUeXBl
KTsKICAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBzdGFja1RyYWNlQXNTdHJpbmcoVk0mLCBjb25z
dCBWZWN0b3I8U3RhY2tGcmFtZT4mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2
ICs3Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CiAg
ICAgICAgIGludDMyX3QmIHRhZygpOwogCisgICAgICAgIHZvaWQqIHBvaW50ZXIoKSBjb25zdDsK
KwogICAgICAgICBzdGF0aWMgUmVnaXN0ZXIgd2l0aEludChpbnQzMl90IGkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVyIHIgPSBqc051bWJlcihpKTsKQEAgLTE5NSw2ICsxOTcsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQqIFJlZ2lzdGVyOjpwb2ludGVyKCkgY29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgcmV0dXJuIHUuZW5jb2RlZFZhbHVlLnB0cjsKKyNlbHNlCisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBheWxvYWQoKSk7CisjZW5kaWYKKyAgICB9CisKICAgICBB
TFdBWVNfSU5MSU5FIGludDMyX3QgUmVnaXN0ZXI6OnBheWxvYWQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHUuZW5jb2RlZFZhbHVlLmFzQml0cy5wYXlsb2FkOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAko
cmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1No
YWRvd0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBT
aGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAgIGlmICghbV9zdGFjay5pc0Vt
cHR5KCkpIHsKICAgICAgICAgVmVjdG9yPEZyYW1lPiBzdGFja1JpZ2h0Tm93OwogICAgICAgICBT
dGFja1Zpc2l0b3I6OnZpc2l0KAotICAgICAgICAgICAgZXhlYywgWyZdIChTdGFja1Zpc2l0b3Im
IHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKKyAgICAgICAgICAgIGV4ZWMsICZ2
bSwgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsK
ICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci0+aXNJbmxpbmVkRnJhbWUoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgICAgICAgICAg
ICAgaWYgKHZpc2l0b3ItPmlzV2FzbUZyYW1lKCkpIHsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lk
IFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIEV4ZWNTCiAgICAgICAgICAgICAgICAgYm9v
bCBpc1RhaWxEZWxldGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1ha2Ug
c2hhZG93IGNoaWNrZW4gd29yayB3aXRoIFdhc20uCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ0MQotICAgICAgICAgICAgICAg
IHN0YWNrUmlnaHROb3cuYXBwZW5kKEZyYW1lKGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNh
bGxlZSgpKSwgdmlzaXRvci0+Y2FsbEZyYW1lKCksIGlzVGFpbERlbGV0ZWQpKTsKKyAgICAgICAg
ICAgICAgICBzdGFja1JpZ2h0Tm93LmFwcGVuZChGcmFtZShqc0Nhc3Q8SlNPYmplY3QqPih2aXNp
dG9yLT5jYWxsZWUoKS5hc0NlbGwoKSksIHZpc2l0b3ItPmNhbGxGcmFtZSgpLCBpc1RhaWxEZWxl
dGVkKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgc3RhY2tSaWdodE5vdy5yZXZlcnNlKCk7CkBAIC0yNzMs
NyArMjczLDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjUwogICAg
IAogICAgIFZlY3RvcjxGcmFtZT4gdG9QdXNoOwogICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQoCi0g
ICAgICAgIGV4ZWMsIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6
OlN0YXR1cyB7CisgICAgICAgIGV4ZWMsICZ2bSwgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3Ip
IC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0lu
bGluZWRGcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBpbmxpbmlu
Zy4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1Njg2CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjp1cGRh
dGUoVk0mIHZtLCBFeGVjUwogICAgICAgICAgICAgICAgIGlmIChzY29wZSkKICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUtPmluaGVyaXRzKHZtLCBKU1Njb3BlOjppbmZv
KCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRvUHVzaC5hcHBlbmQoRnJhbWUoanND
YXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLCBjYWxsRnJhbWUsIGlzVGFpbERlbGV0
ZWQsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxGcmFtZS0+
Y2FsbFNpdGVJbmRleCgpKSk7CisgICAgICAgICAgICB0b1B1c2guYXBwZW5kKEZyYW1lKGpzQ2Fz
dDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSwgY2FsbEZyYW1lLCBpc1Rh
aWxEZWxldGVkLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBzY29wZSwgY29kZUJsb2NrLCBjYWxs
RnJhbWUtPmNhbGxTaXRlSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBpZiAoaW5kZXhJbkxvZyA8
IGxvZ0N1cnNvckluZGV4CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gcHJvdGVj
dHMgdXMgZnJvbSB0aGUgY2FzZSB3aGVyZSBhZHZhbmNlSW5kZXhJbkxvZ1RvIGRpZG4ndCBmaW5k
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbklubGluZXMuaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW5JbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgogdm9pZCBTaGFkb3dDaGlja2VuOjppdGVyYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIERlZmVyR0MgZGVmZXJHQyhleGVj
LT52bSgpLmhlYXApOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKIAogICAgIHVwZGF0
ZSh2bSwgZXhlYyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDE5ICszMSwyMCBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotU3RhY2tW
aXNpdG9yOjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lKQorU3RhY2tWaXNpdG9y
OjpTdGFja1Zpc2l0b3IoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0pCiB7CiAgICAgbV9m
cmFtZS5tX2luZGV4ID0gMDsKICAgICBtX2ZyYW1lLm1faXNXYXNtRnJhbWUgPSBmYWxzZTsKICAg
ICBDYWxsRnJhbWUqIHRvcEZyYW1lOwogICAgIGlmIChzdGFydEZyYW1lKSB7Ci0gICAgICAgIG1f
ZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBzdGFydEZyYW1lLT52bSgpLnRvcFZNRW50cnlGcmFtZTsK
LSAgICAgICAgdG9wRnJhbWUgPSBzdGFydEZyYW1lLT52bSgpLnRvcENhbGxGcmFtZTsKKyAgICAg
ICAgQVNTRVJUKHZtKTsKKyAgICAgICAgbV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IHZtLT50b3BW
TUVudHJ5RnJhbWU7CisgICAgICAgIHRvcEZyYW1lID0gdm0tPnRvcENhbGxGcmFtZTsKICAgICAg
ICAgCiAgICAgICAgIGlmICh0b3BGcmFtZSAmJiBzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS5t
X1ZNRW50cnlGcmFtZSkgPT0gc3RhdGljX2Nhc3Q8dm9pZCo+KHRvcEZyYW1lKSkgewogICAgICAg
ICAgICAgdG9wRnJhbWUgPSB2bUVudHJ5UmVjb3JkKG1fZnJhbWUubV9WTUVudHJ5RnJhbWUpLT5t
X3ByZXZUb3BDYWxsRnJhbWU7CkBAIC0xMDMsNyArMTA0LDcgQEAgdm9pZCBTdGFja1Zpc2l0b3I6
OnJlYWRGcmFtZShDYWxsRnJhbWUqIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KGNhbGxGcmFtZS0+Y2FsbGVlKCktPmlzQW55V2FzbUNhbGxlZShjYWxsRnJhbWUtPnZtKCkpKSB7
CisgICAgaWYgKGNhbGxGcmFtZS0+aXNBbnlXYXNtQ2FsbGVlKCkpIHsKICAgICAgICAgcmVhZE5v
bklubGluZWRGcmFtZShjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU1
LDEwICsxNTYsMTAgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUoQwog
ICAgIG1fZnJhbWUubV9jYWxsZXJJc1ZNRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVu
dHJ5RnJhbWUgIT0gbV9mcmFtZS5tX1ZNRW50cnlGcmFtZTsKICAgICBtX2ZyYW1lLm1faXNXYXNt
RnJhbWUgPSBmYWxzZTsKIAotICAgIEpTQ2VsbCogY2FsbGVlID0gY2FsbEZyYW1lLT5jYWxsZWUo
KTsKKyAgICBDYWxsZWVCaXRzIGNhbGxlZSA9IGNhbGxGcmFtZS0+Y2FsbGVlKCk7CiAgICAgbV9m
cmFtZS5tX2NhbGxlZSA9IGNhbGxlZTsKIAotICAgIGlmIChjYWxsZWUtPmlzQW55V2FzbUNhbGxl
ZSgqY2FsbGVlLT52bSgpKSkgeworICAgIGlmIChjYWxsRnJhbWUtPmlzQW55V2FzbUNhbGxlZSgp
KSB7CiAgICAgICAgIG1fZnJhbWUubV9pc1dhc21GcmFtZSA9IHRydWU7CiAgICAgICAgIG1fZnJh
bWUubV9jb2RlQmxvY2sgPSBudWxscHRyOwogICAgICAgICBtX2ZyYW1lLm1fYnl0ZWNvZGVPZmZz
ZXQgPSAwOwpAQCAtMjA0LDcgKzIwNSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5l
ZEZyYW1lKENhbGwKIAogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgICAgICBtX2ZyYW1lLm1fY2Fs
bGVlID0gY2FsbGVlOwotICAgICAgICBBU1NFUlQobV9mcmFtZS5jYWxsZWUoKSk7CisgICAgICAg
IEFTU0VSVCghIW1fZnJhbWUuY2FsbGVlKCkucmF3UHRyKCkpOwogCiAgICAgICAgIC8vIFRoZSBj
YWxsZXJGcmFtZSBqdXN0IG5lZWRzIHRvIGJlIG5vbi1udWxsIHRvIGluZGljYXRlIHRoYXQgd2UK
ICAgICAgICAgLy8gaGF2ZW4ndCByZWFjaGVkIHRoZSBsYXN0IGZyYW1lIHlldC4gU2V0dGluZyBp
dCB0byB0aGUgcm9vdApAQCAtMjU0LDE0ICsyNTUsMTIgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IFN0YWNrVmlzaXRvcjo6RnJhbQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmIChp
c1dhc21GcmFtZSgpKSB7Ci0gICAgICAgIGlmIChKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxl
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KCpjYWxsZWUtPnZtKCksIGNhbGxl
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKLSAgICAgICAgICAgIC8vIE90aGVyIHdhc20gY2FsbGVlcyAoZS5nLCBzdHVicykgZG9u
J3QgdXNlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycywgc28gbm90aGluZyBuZWVkcwotICAgICAgICAg
ICAgLy8gdG8gYmUgcmVzdG9yZWQgZm9yIHRoZW0uCisgICAgICAgIGlmIChjYWxsZWUoKS5pc0Nl
bGwoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNXZWJBc3NlbWJseVRvSlNDYWxs
ZWUoY2FsbGVlKCkuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIFdhc206OkNhbGxlZSog
d2FzbUNhbGxlZSA9IGNhbGxlZSgpLmFzV2FzbUNhbGxlZSgpOworICAgICAgICByZXR1cm4gd2Fz
bUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKQEAgLTI3Niw3ICsyNzUsNiBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
U3RhY2tWaXNpdG9yOjpGcmFtCiBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25O
YW1lKCkgY29uc3QKIHsKICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgIEpTQ2VsbCogY2FsbGVl
ID0gdGhpcy0+Y2FsbGVlKCk7CiAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKICAgICBjYXNl
IENvZGVUeXBlOjpXYXNtOgpAQCAtMjg4LDEyICsyODYsMTQgQEAgU3RyaW5nIFN0YWNrVmlzaXRv
cjo6RnJhbWU6OmZ1bmN0aW9uTmFtZQogICAgIGNhc2UgQ29kZVR5cGU6Ok1vZHVsZToKICAgICAg
ICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJtb2R1bGUgY29kZSIpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvZGVUeXBlOjpOYXRpdmU6CisgICAgY2FzZSBDb2RlVHlwZTo6TmF0aXZl
OiB7CisgICAgICAgIEpTQ2VsbCogY2FsbGVlID0gdGhpcy0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAg
ICAgICAgIGlmIChjYWxsZWUpCiAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVk
RGlzcGxheU5hbWUoY2FsbEZyYW1lKCktPnZtKCksIGpzQ2FzdDxKU09iamVjdCo+KGNhbGxlZSkp
LmltcGwoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2RlVHlwZTo6RnVuY3Rpb246Ci0g
ICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+
dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4oY2FsbGVlKSkuaW1wbCgpOworICAgIH0KKyAgICBjYXNl
IENvZGVUeXBlOjpGdW5jdGlvbjogCisgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWRE
aXNwbGF5TmFtZShjYWxsRnJhbWUoKS0+dm0oKSwganNDYXN0PEpTT2JqZWN0Kj4odGhpcy0+Y2Fs
bGVlKCkuYXNDZWxsKCkpKS5pbXBsKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZVR5
cGU6Okdsb2JhbDoKICAgICAgICAgdHJhY2VMaW5lID0gQVNDSUlMaXRlcmFsKCJnbG9iYWwgY29k
ZSIpOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQ
cmludFN0cmUKICAgICAgICAgICAgIG91dC5wcmludChpbmRlbnQsICJJbmxpbmVDYWxsRnJhbWU6
ICIsIFJhd1BvaW50ZXIobV9pbmxpbmVDYWxsRnJhbWUpLCAiXG4iKTsKICNlbmRpZgogCi0gICAg
ICAgIG91dC5wcmludChpbmRlbnQsICJjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKCkpLCAi
XG4iKTsKKyAgICAgICAgb3V0LnByaW50KGluZGVudCwgImNhbGxlZTogIiwgUmF3UG9pbnRlcihj
YWxsZWUoKS5yYXdQdHIoKSksICJcbiIpOwogICAgICAgICBvdXQucHJpbnQoaW5kZW50LCAicmV0
dXJuUEM6ICIsIFJhd1BvaW50ZXIocmV0dXJuUEMpLCAiXG4iKTsKICAgICAgICAgb3V0LnByaW50
KGluZGVudCwgImNhbGxlckZyYW1lOiAiLCBSYXdQb2ludGVyKGNhbGxlckZyYW1lKSwgIlxuIik7
CiAgICAgICAgIHVuc2lnbmVkIGxvY2F0aW9uUmF3Qml0cyA9IGNhbGxGcmFtZS0+Y2FsbFNpdGVB
c1Jhd0JpdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFj
a1Zpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKICNpbmNs
dWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3
dGYvSW5kZW50ZXIuaD4KQEAgLTYyLDcgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3Qg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyB9CiAgICAgICAgIGJvb2wgY2FsbGVySXNWTUVudHJ5RnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxlcklzVk1FbnRyeUZyYW1lOyB9CiAgICAgICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlckZyYW1lOyB9Ci0gICAgICAg
IEpTQ2VsbCogY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KKyAgICAgICAgQ2Fs
bGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQogICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNl
dDsgfQogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpIGNvbnN0IHsK
QEAgLTExMCw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZNRW50cnlGcmFtZSogbV9WTUVu
dHJ5RnJhbWU7CiAgICAgICAgIFZNRW50cnlGcmFtZSogbV9DYWxsZXJWTUVudHJ5RnJhbWU7CiAg
ICAgICAgIENhbGxGcmFtZSogbV9jYWxsZXJGcmFtZTsKLSAgICAgICAgSlNDZWxsKiBtX2NhbGxl
ZTsKKyAgICAgICAgQ2FsbGVlQml0cyBtX2NhbGxlZTsKICAgICAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CiAgICAgICAgIHNpemVfdCBtX2FyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOwpAQCAtMTMwLDkgKzEzMSw5IEBAIHB1YmxpYzoKICAgICAv
LyAgICAgU3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJikgY29uc3Q7CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCB2aXNpdChDYWxsRnJhbWUq
IHN0YXJ0RnJhbWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgc3RhdGljIHZvaWQgdmlz
aXQoQ2FsbEZyYW1lKiBzdGFydEZyYW1lLCBWTSogdm0sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgewotICAgICAgICBTdGFja1Zpc2l0b3IgdmlzaXRvcihzdGFydEZyYW1lKTsKKyAgICAg
ICAgU3RhY2tWaXNpdG9yIHZpc2l0b3Ioc3RhcnRGcmFtZSwgdm0pOwogICAgICAgICB3aGlsZSAo
dmlzaXRvci0+Y2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgIFN0YXR1cyBzdGF0dXMgPSBmdW5j
dG9yKHZpc2l0b3IpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBDb250aW51ZSkKQEAgLTE0
Niw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bndpbmRUb01hY2hpbmVDb2RlQmxvY2tG
cmFtZSgpOwogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrVmlzaXRvcihD
YWxsRnJhbWUqIHN0YXJ0RnJhbWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrVmlzaXRv
cihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUsIFZNKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGdvdG9OZXh0RnJhbWUoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTUsMTEgKzU5NSwxNSBAQCB2b2lkIGxpbmtG
b3IoCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKIAogICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVz
dCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJv
bSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxl
ckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKICAgICBWTSYgdm0gPSBjYWxsZXJGcmFtZS0+
dm0oKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKIAogICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2
YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlUb0pTQ2Fs
bGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1l
LT5jYWxsZWUoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgSlNDZWxsKiBvd25lciA9IGlzV2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgPyB3ZWJB
c3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2Rl
QmxvY2s7CiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlz
TGlua2VkKCkpOwpAQCAtNzE3LDEyICs3MjEsMTcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxs
KAogICAgIH0KIAogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFt
ZSgpOworCisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxl
ZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgp
KTsKKwogICAgIFZNJiB2bSA9IGNhbGxlckZyYW1lLT52bSgpOwogICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNXZWJB
c3NlbWJseSA9IGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlckZyYW1lLT5jYWxsZWUoKSk7
CisgICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKIAogICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0
dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlz
V2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKSkgOiBj
YWxsZXJDb2RlQmxvY2s7CisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJB
c3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2Rl
QmxvY2s7CiAgICAgQVNTRVJUKG93bmVyKTsKIAogICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gMjE0
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29k
ZU9mZnNldChFeAogCiAgICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgewogICAgICAgICAgICAg
RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOwot
ICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgICAgICAg
ICAgU3RhY2tWaXNpdG9yOjp2aXNpdCh2bS50b3BDYWxsRnJhbWUsICZ2bSwgZnVuY3Rvcik7CiAg
ICAgICAgICAgICBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwogICAgICAgICAgICAg
KmJ5dGVjb2RlT2Zmc2V0ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDggKzE1NiwxMCBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNT
CiAgICAgYm9vbCBoYXNUcmFjZSA9IGFkZEVycm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KGV4
ZWMsIHZtLCB0aGlzLCB1c2VDdXJyZW50RnJhbWUsIGNhbGxGcmFtZSwgaGFzU291cmNlQXBwZW5k
ZXIoKSA/ICZieXRlY29kZU9mZnNldCA6IG51bGxwdHIpOwogCiAgICAgaWYgKGhhc1RyYWNlICYm
IGNhbGxGcmFtZSAmJiBoYXNTb3VyY2VBcHBlbmRlcigpKSB7Ci0gICAgICAgIGlmIChjYWxsRnJh
bWUgJiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgCisgICAgICAgIGlmIChjYWxsRnJhbWUgJiYg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
PmNhbGxlZSgpLmlzV2FzbSgpKTsKICAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJyb3IoY2Fs
bEZyYW1lLCB0aGlzLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMjE0
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIk51bWJlck9iamVjdC5oIgogI2luY2x1ZGUgIldl
YkFzc2VtYmx5VG9KU0NhbGxlZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0y
OTUsMTUgKzI5NCw0IEBAIEpTVmFsdWUgSlNDZWxsOjpnZXRQcm90b3R5cGUoSlNPYmplY3QqLCAK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEpTQ2VsbDo6aXNB
bnlXYXNtQ2FsbGVlKFZNJiB2bSkgY29uc3QKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0g
ICAgcmV0dXJuIGluaGVyaXRzKHZtLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjppbmZvKCkpIHx8IGlz
V2ViQXNzZW1ibHlUb0pTQ2FsbGVlKHRoaXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0p
OwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIxNDg2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNyArMTAxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHJpbmcoKSBjb25z
dDsKICAgICBib29sIGlzU3ltYm9sKCkgY29uc3Q7CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0
OwotICAgIGJvb2wgaXNBbnlXYXNtQ2FsbGVlKFZNJikgY29uc3Q7CiAgICAgYm9vbCBpc0dldHRl
clNldHRlcigpIGNvbnN0OwogICAgIGJvb2wgaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSBjb25zdDsK
ICAgICBib29sIGlzUHJveHkoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDExICsxMjYsMTIgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bgogCiBBTFdBWVNfSU5MSU5FIFZNJiBFeGVjU3RhdGU6OnZtKCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoY2FsbGVlKCkpOwotICAgIEFTU0VSVChjYWxsZWUoKS0+dm0oKSk7Ci0gICAgQVNTRVJUKCFj
YWxsZWUoKS0+aXNMYXJnZUFsbG9jYXRpb24oKSk7CisgICAgSlNDZWxsKiBjYWxsZWUgPSB0aGlz
LT5jYWxsZWUoKS5hc0NlbGwoKTsKKyAgICBBU1NFUlQoY2FsbGVlKTsKKyAgICBBU1NFUlQoY2Fs
bGVlLT52bSgpKTsKKyAgICBBU1NFUlQoIWNhbGxlZS0+aXNMYXJnZUFsbG9jYXRpb24oKSk7CiAg
ICAgLy8gVGhpcyBpcyBhbiBpbXBvcnRhbnQgb3B0aW1pemF0aW9uIHNpbmNlIHdlIGFjY2VzcyB0
aGlzIHNvIG9mdGVuLgotICAgIHJldHVybiAqY2FsbGVlKCktPm1hcmtlZEJsb2NrKCkudm0oKTsK
KyAgICByZXR1cm4gKmNhbGxlZS0+bWFya2VkQmxvY2soKS52bSgpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNywx
MCBAQCBwdWJsaWM6CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNr
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogY2FsbGVlID0g
dmlzaXRvci0+Y2FsbGVlKCk7CisgICAgICAgIGlmICghdmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKworICAgICAg
ICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpOwogICAgICAgICBp
ZiAoY2FsbGVlICE9IG1fdGFyZ2V0Q2FsbGVlKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6Q29udGludWU7CiAKQEAgLTI3OSw3ICsyODIsMTAgQEAgcHVibGljOgogCiAgICAgU3Rh
Y2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiAgICAgewotICAgICAgICBKU0NlbGwqIGNhbGxlZSA9IHZpc2l0b3ItPmNhbGxlZSgpOworICAg
ICAgICBpZiAoIXZpc2l0b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisKKyAgICAgICAgSlNDZWxsKiBjYWxsZWUgPSB2aXNp
dG9yLT5jYWxsZWUoKS5hc0NlbGwoKTsKIAogICAgICAgICBpZiAoY2FsbGVlICYmIGNhbGxlZS0+
aW5oZXJpdHMoKmNhbGxlZS0+dm0oKSwgSlNCb3VuZEZ1bmN0aW9uOjppbmZvKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMTQ4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNiBAQAogI2luY2x1ZGUgIkpTV2Vha01hcC5o
IgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKLSNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
ICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVBy
b3BlcnR5SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsMTMgKzExNywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZWNvcmRKU0ZyYW1l
KFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+JiBzdGFja1RyYWNlKQogICAgIHsKICAgICAg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4OwotICAgICAgICBKU1ZhbHVlIHVuc2FmZUNh
bGxlZSA9IG1fY2FsbEZyYW1lLT51bnNhZmVDYWxsZWUoKTsKKyAgICAgICAgQ2FsbGVlQml0cyB1
bnNhZmVDYWxsZWUgPSBtX2NhbGxGcmFtZS0+dW5zYWZlQ2FsbGVlKCk7CiAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPnVuc2FmZUNvZGVCbG9jaygpOwogICAgICAg
ICBpZiAoY29kZUJsb2NrKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZENvZGVCbG9jayhj
b2RlQmxvY2spKTsKICAgICAgICAgICAgIGNhbGxTaXRlSW5kZXggPSBtX2NhbGxGcmFtZS0+dW5z
YWZlQ2FsbFNpdGVJbmRleCgpOwogICAgICAgICB9Ci0gICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0
aF0gPSBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoY29kZUJsb2NrLCBKU1ZhbHVlOjplbmNvZGUodW5z
YWZlQ2FsbGVlKSwgY2FsbFNpdGVJbmRleCk7CisgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0g
PSBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoY29kZUJsb2NrLCB1bnNhZmVDYWxsZWUsIGNhbGxTaXRl
SW5kZXgpOwogICAgICAgICBtX2RlcHRoKys7CiAgICAgfQogCkBAIC00ODUsMTEgKzQ4NSwxNiBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICBz
dGFja1RyYWNlLmZyYW1lcy5hcHBlbmQoU3RhY2tGcmFtZSgpKTsKICAgICAgICAgfTsKIAotICAg
ICAgICBhdXRvIHN0b3JlQ2FsbGVlSW50b0xhc3RGcmFtZSA9IFsmXSAoRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZENhbGxlZSkgeworICAgICAgICBhdXRvIHN0b3JlQ2FsbGVlSW50b0xhc3RGcmFtZSA9
IFsmXSAoQ2FsbGVlQml0cyBjYWxsZWVCaXRzKSB7CiAgICAgICAgICAgICAvLyBTZXQgdGhlIGNh
bGxlZSBpZiBpdCdzIGEgdmFsaWQgR0Mgb2JqZWN0LgotICAgICAgICAgICAgSlNWYWx1ZSBjYWxs
ZWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZENhbGxlZSk7CiAgICAgICAgICAgICBTdGFja0Zy
YW1lJiBzdGFja0ZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpOwogICAgICAgICAgICAg
Ym9vbCBhbHJlYWR5SGFzRXhlY3V0YWJsZSA9ICEhc3RhY2tGcmFtZS5leGVjdXRhYmxlOworICAg
ICAgICAgICAgaWYgKGNhbGxlZUJpdHMuaXNXYXNtKCkpIHsKKyAgICAgICAgICAgICAgICBzdGFj
a0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6VW5rbm93bjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWUgY2FsbGVlID0gY2Fs
bGVlQml0cy5hc0NlbGwoKTsKICAgICAgICAgICAgIGlmICghSGVhcFV0aWw6OmlzVmFsdWVHQ09i
amVjdChtX3ZtLmhlYXAsIGZpbHRlciwgY2FsbGVlKSkgewogICAgICAgICAgICAgICAgIGlmICgh
YWxyZWFkeUhhc0V4ZWN1dGFibGUpCiAgICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJh
bWVUeXBlID0gRnJhbWVUeXBlOjpVbmtub3duOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMjE0ODY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMg
VGhyZWFkU2EKIHB1YmxpYzoKIAogICAgIHN0cnVjdCBVbnByb2Nlc3NlZFN0YWNrRnJhbWUgewot
ICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEVuY29k
ZWRKU1ZhbHVlIGNhbGxlZSwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAgICAgICBV
bnByb2Nlc3NlZFN0YWNrRnJhbWUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxlZUJpdHMgY2Fs
bGVlLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCiAgICAgICAgICAgICA6IHVudmVyaWZp
ZWRDYWxsZWUoY2FsbGVlKQogICAgICAgICAgICAgLCB2ZXJpZmllZENvZGVCbG9jayhjb2RlQmxv
Y2spCiAgICAgICAgICAgICAsIGNhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCkKQEAgLTU3LDEz
ICs1NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICA6IGNDb2RlUEMocGMpCiAgICAgICAgIHsg
fQogCi0gICAgICAgIFVucHJvY2Vzc2VkU3RhY2tGcmFtZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVudmVyaWZpZWRDYWxsZWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAg
ICAgfQorICAgICAgICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUoKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgdm9pZCogY0NvZGVQQyB7IG51bGxwdHIgfTsKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUgdW52
ZXJpZmllZENhbGxlZTsKKyAgICAgICAgQ2FsbGVlQml0cyB1bnZlcmlmaWVkQ2FsbGVlOwogICAg
ICAgICBDb2RlQmxvY2sqIHZlcmlmaWVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OwogICAgICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0ZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsOSArNDIsMTAgQEAgaW50cHRyX3QgU3RhY2tGcmFtZTo6c291cmNlSUQoKSBjb25z
dAogCiBTdHJpbmcgU3RhY2tGcmFtZTo6c291cmNlVVJMKCkgY29uc3QKIHsKKyAgICBpZiAobV9p
c1dhc21GcmFtZSkKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiW3dhc20gY29kZV0iKTsK
KwogICAgIGlmICghbV9jb2RlQmxvY2spIHsKLSAgICAgICAgaWYgKG1fY2FsbGVlICYmIG1fY2Fs
bGVlLT5pc0FueVdhc21DYWxsZWUoKm1fY2FsbGVlLT52bSgpKSkKLSAgICAgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIlt3YXNtIGNvZGVdIik7CiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIltuYXRpdmUgY29kZV0iKTsKICAgICB9CiAKQEAgLTU2LDYgKzU3LDkgQEAgU3RyaW5nIFN0
YWNrRnJhbWU6OnNvdXJjZVVSTCgpIGNvbnN0CiAKIFN0cmluZyBTdGFja0ZyYW1lOjpmdW5jdGlv
bk5hbWUoVk0mIHZtKSBjb25zdAogeworICAgIGlmIChtX2lzV2FzbUZyYW1lKQorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCI8d2FzbT4iKTsKKwogICAgIGlmIChtX2NvZGVCbG9jaykgewog
ICAgICAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
RXZhbENvZGU6CkBAIC03Miw4ICs3Niw2IEBAIFN0cmluZyBTdGFja0ZyYW1lOjpmdW5jdGlvbk5h
bWUoVk0mIHZtKSAKICAgICB9CiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKG1fY2FsbGVlKSB7
Ci0gICAgICAgIGlmIChtX2NhbGxlZS0+aXNBbnlXYXNtQ2FsbGVlKCptX2NhbGxlZS0+dm0oKSkp
Ci0gICAgICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCI8d2FzbT4iKTsKICAgICAgICAgaWYg
KG1fY2FsbGVlLT5pc09iamVjdCgpKQogICAgICAgICAgICAgbmFtZSA9IGdldENhbGN1bGF0ZWRE
aXNwbGF5TmFtZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4obV9jYWxsZWUuZ2V0KCkpKS5pbXBsKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RhY2tGcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0YWNrRnJhbWUu
aAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rh
Y2tGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIGNsYXNzIEpTT2JqZWN0
OwogCiBjbGFzcyBTdGFja0ZyYW1lIHsKIHB1YmxpYzoKKyAgICBTdGFja0ZyYW1lKCkgPSBkZWZh
dWx0OworCiAgICAgU3RhY2tGcmFtZShWTSYgdm0sIEpTQ2VsbCogY2FsbGVlKQogICAgICAgICA6
IG1fY2FsbGVlKHZtLCBjYWxsZWUpCiAgICAgeyB9CkBAIC00NSw2ICs0NywxMyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICB7IH0KIAor
ICAgIHN0YXRpYyBTdGFja0ZyYW1lIHdhc20oKQorICAgIHsKKyAgICAgICAgU3RhY2tGcmFtZSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2lzV2FzbUZyYW1lID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBib29sIGhhc0xpbmVBbmRDb2x1bW5JbmZvKCkgY29u
c3QgeyByZXR1cm4gISFtX2NvZGVCbG9jazsgfQogICAgIAogICAgIHZvaWQgY29tcHV0ZUxpbmVB
bmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwpAQCAtNjUs
NyArNzQsNyBAQCBwcml2YXRlOgogICAgIFN0cm9uZzxKU0NlbGw+IG1fY2FsbGVlIHsgfTsKICAg
ICBTdHJvbmc8Q29kZUJsb2NrPiBtX2NvZGVCbG9jayB7IH07CiAgICAgdW5zaWduZWQgbV9ieXRl
Y29kZU9mZnNldCB7IFVJTlRfTUFYIH07Ci0gICAgCisgICAgYm9vbCBtX2lzV2FzbUZyYW1lIHsg
ZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDYgQEAgVk06
OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHByb2dyYW1FeGVjdXRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgd2ViQXNzZW1ibHlDYWxs
ZWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0
dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlUb0pTQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAjZW5kaWYKQEAgLTYxNiwxNCArNjE1LDE0IEBAIHZvaWQgVk06OnRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywKIAogICAgIEFTU0VSVChleGVjID09IHRvcENhbGxG
cmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
IHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwog
Ci0gICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKGV4
ZWMsIGV4Y2VwdGlvbik7CisgICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRp
b25Ub0JlVGhyb3duKCp0aGlzLCBleGVjLCBleGNlcHRpb24pOwogCiAgICAgc2V0RXhjZXB0aW9u
KGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9ICp0aGlzOwogICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0ganNEeW5hbWlj
Q2FzdDxFeGNlcHRpb24qPih2bSwgdGhyb3duVmFsdWUpOwogICAgIGlmICghZXhjZXB0aW9uKQog
ICAgICAgICBleGNlcHRpb24gPSBFeGNlcHRpb246OmNyZWF0ZSgqdGhpcywgdGhyb3duVmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMTQ4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjEsNyArMzIxLDYgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVj
dXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJs
ZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFz
c2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU09iamVj
dC5oIgotI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJqcy9K
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCiAjaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCiAjaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAgICBWYWx1ZSogY29kZUJsb2Nr
ID0gaXNKU0Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywKICAgICAgICAgICAg
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSk7CiAgICAgICAgIFZhbHVlKiBqdW1w
RGVzdGluYXRpb24gPSBpc0pTQmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLAot
ICAgICAgICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNvZGVCbG9jaywgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jazo6b2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0dWIobV9pbmZvLmlu
dGVybmFsRnVuY3Rpb25Db3VudCgpLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgICAgICBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY29kZUJsb2NrLCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrOjpvZmZzZXRPZkltcG9ydFdhc21Ub0pTU3R1YihmdW5jdGlvbkluZGV4KSk7CiAgICAgICAg
IFZhbHVlKiBqc0NhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwo
bV9wcm9jLCBpc0pTQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwK
ICAgICAgICAgICAgIFsmXSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjE0
ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB3YXNtVG9XYXNtKAogICAgIH0KIAogICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUg
V2ViQXNzZW1ibHkgZnVuY3Rpb24uCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0
Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5UG9pbnRDb2RlKCkpLCBz
Y3JhdGNoKTsKKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2NyYXRjaCwgV2ViQXNzZW1i
bHlGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludCgpKSwgc2NyYXRjaCk7CiAgICAgaml0
Lmp1bXAoc2NyYXRjaCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUu
Y3BwCShyZXZpc2lvbiAyMTQ4NjQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwOjIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21GYXVs
dFNpZ25hbEhhbmRsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxw
dHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKKworSlNX
ZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCisgICAgOiBCYXNl
KHZtLCB2bS53ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKK3sgfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAg
bV9lbnRyeXBvaW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKKyAgICBXYXNtOjpyZWdpc3RlckNv
ZGUobV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIFdhc206OnVucmVn
aXN0ZXJDb2RlKHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigp
LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CisgICAgdGhp
c09iamVjdC0+SlNXZWJBc3NlbWJseUNhbGxlZTo6fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAkocmV2aXNpb24g
MjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjQsMzYgKzI0LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oIgogCi1uYW1lc3BhY2UgSlNDIHsKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFz
c2VtYmx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxwdHIsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKLQotSlNXZWJBc3Nl
bWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2
bS53ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKLXsgfQotCi12b2lkIEpTV2ViQXNz
ZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVu
dHJ5cG9pbnQpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAgbV9lbnRy
eXBvaW50ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKLSAgICBXYXNtOjpyZWdpc3RlckNvZGUobV9l
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPmVuZCgpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKK0NhbGxlZTo6Q2FsbGVlKEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIDog
bV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCiB7Ci0gICAgSlNXZWJBc3NlbWJseUNh
bGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjZWxs
KTsKLSAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSh0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmpl
Y3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkpOwotICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFz
c2VtYmx5Q2FsbGVlKCk7CisgICAgcmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIEpTQworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlLmgJKHJldmlzaW9uIDIxNDg2NCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOjIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNz
ZW1ibHlDYWxsZWUgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBjcmVhdGUoVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCkKKyAgICB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxsZWU+KHZtLmhlYXApKSBKU1dl
YkFzc2VtYmx5Q2FsbGVlKHZtKTsKKyAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVhdGlvbih2bSwg
V1RGTW92ZShlbnRyeXBvaW50KSk7CisgICAgICAgIHJldHVybiBjYWxsZWU7CisgICAgfQorCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkKiBl
bnRyeXBvaW50KCkgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KKworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgV2FzbTo6RW50cnlwb2ludCYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFz
c2VtYmx5Q2FsbGVlKFZNJik7CisKKyAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAkocmV2aXNpb24g
MjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDQ1ICsyNywzMiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKLW5hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZSA6IHB1
YmxpYyBKU0NlbGwgeworY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PENhbGxlZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAg
c3RhdGljIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0sIFdhc206OkVudHJ5cG9p
bnQmJiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50
cnlwb2ludCYmIGVudHJ5cG9pbnQpCiAgICAgewotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBjYWxsZWUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseUNhbGxlZSh2bSk7Ci0gICAgICAgIGNhbGxlZS0+Zmlu
aXNoQ3JlYXRpb24odm0sIFdURk1vdmUoZW50cnlwb2ludCkpOwotICAgICAgICByZXR1cm4gY2Fs
bGVlOworICAgICAgICBDYWxsZWUqIGNhbGxlZSA9IG5ldyBDYWxsZWUoV1RGTW92ZShlbnRyeXBv
aW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqY2FsbGVlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCi0gICAgewotICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQogICAgIHZvaWQqIGVudHJ5
cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOyB9CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJl
Z2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQog
CiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTV2ViQXNzZW1i
bHlDYWxsZWUoVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6RW50cnlw
b2ludCYmKTsKIAogICAgIFdhc206OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OwogfTsKIAotfSAv
LyBuYW1lc3BhY2UgSlNDCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29udGV4dC5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTEgQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
IgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiV2FzbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAi
V2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgQ2FsbExpbmtJbmZvOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1j
bGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwogY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CiAKIG5h
bWVzcGFjZSBXYXNtIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuSW5saW5lcy5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOCBAQAog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgorI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbVBsYW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
QEAgLTM5LDEzICs0MCwxMyBAQCB2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1
bmN0CiAgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJu
YWxGdW5jdGlvbkluZGV4KSB7CiAgICAgICAgIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlv
biA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7
CiAKLSAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gSlNX
ZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKG1fdm0sIFdURk1vdmUoZnVuY3Rpb24tPmpzVG9XYXNt
RW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVu
Y3Rpb24tPmpzVG9XYXNtQ2FsbGVlTW92ZUxvY2F0aW9uLCBqc0VudHJ5cG9pbnRDYWxsZWUpOwor
ICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpDYWxs
ZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5qc1RvV2FzbUVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5qc1RvV2FzbUNhbGxl
ZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShqc0VudHJ5cG9pbnRDYWxsZWUucHRy
KCkpKTsKIAotICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxl
ZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShtX3ZtLCBXVEZNb3ZlKGZ1bmN0aW9uLT53
YXNtRW50cnlwb2ludCkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
ZnVuY3Rpb24tPndhc21DYWxsZWVNb3ZlTG9jYXRpb24sIHdhc21FbnRyeXBvaW50Q2FsbGVlKTsK
KyAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT53YXNtRW50cnlwb2ludCkpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPndhc21DYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkp
KTsKIAotICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIGpzRW50cnlwb2lu
dENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUpOworICAgICAgICBjYWxsYmFjayhpbnRlcm5h
bEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoanNFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNt
RW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRodW5rcy5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAgICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwogICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwogICAgICAgICBBU1NFUlQoISF2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHRvdGFsIGhhY2ssIGJ1dCB0aGUgbGxpbnQgKGJvdGggb3BfY2F0Y2ggYW5k
IGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uKQorICAgICAgICAvLyByZXF1aXJlIGEgY2VsbCBpbiB0
aGUgY2FsbGVlIGZpZWxkIHRvIGxvYWQgdGhlIFZNLiAoVGhlIGJhc2VsaW5lIEpJVCBkb2VzIG5v
dCByZXF1aXJlCisgICAgICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNv
bnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24K
KyAgICAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRjaCBp
bmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKKyAgICAgICAgLy8gdG8gdGhl
IGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywgd2UgY291bGQgcmVtb3ZlIHRoaXMg
dGVycmlibGUgaGFjay4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDQ0MAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtD
YWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih3YXNtQ29udGV4
dC0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlKCkpOwogICAgICAgICByZXR1cm4gdm0tPnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCShyZXZpc2lvbiAyMTQ4
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUNhbGxlZS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIldhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKLQotSlNXZWJBc3NlbWJseUNhbGxlZTo6
SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCi0gICAgOiBCYXNlKHZtLCB2bS53ZWJBc3NlbWJs
eUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKLXsgfQotCi12b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCi17
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotCi0gICAgbV9lbnRyeXBvaW50ID0gV1RG
TW92ZShlbnRyeXBvaW50KTsKLSAgICBXYXNtOjpyZWdpc3RlckNvZGUobV9lbnRyeXBvaW50LmNv
bXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCBtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsK
LX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNXZWJB
c3NlbWJseUNhbGxlZSo+KGNlbGwpOwotICAgIFdhc206OnVucmVnaXN0ZXJDb2RlKHRoaXNPYmpl
Y3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnko
KS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVm
KCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7Ci0gICAgdGhpc09iamVjdC0+SlNXZWJBc3Nl
bWJseUNhbGxlZTo6fkpTV2ViQXNzZW1ibHlDYWxsZWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCShyZXZpc2lv
biAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJSZWdpc3RlckF0
T2Zmc2V0TGlzdC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWUgOiBw
dWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKLQotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiBjcmVhdGUoVk0mIHZtLCBXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKLSAgICB7Ci0g
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxsZWU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q2FsbGVl
KHZtKTsKLSAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShlbnRyeXBv
aW50KSk7Ci0gICAgICAgIHJldHVybiBjYWxsZWU7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICB2b2lkKiBlbnRyeXBvaW50KCkgeyBy
ZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsgfQotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7
IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KLQotcHJpdmF0ZToK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6RW50
cnlwb2ludCYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZN
Jik7Ci0KLSAgICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0
Nyw3IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2QKICAgICBtX21v
ZHVsZS5zZXQodm0sIHRoaXMsIG93bmVyKTsKICAgICBBU1NFUlQoIW1vZHVsZSgpLT5jb2RlQmxv
Y2sobW9kZSkpOwogICAgIG1vZHVsZSgpLT5zZXRDb2RlQmxvY2sodm0sIG1vZGUsIHRoaXMpOwot
Ci0gICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwgbV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pICogMik7CisgICAgbV9jYWxsZWVzLnJlc2l6ZSht
X2NhbGxlZUNvdW50ICogMik7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5p
dGlhbGl6ZSgpCkBAIC01Nyw3ICs1Niw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6
aW5pdGlhbGl6ZSgKICAgICAgICAgcmV0dXJuOwogCiAgICAgVk0mIHZtID0gcGxhbigpLnZtKCk7
Ci0gICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFT
U0VSVF9VTlVTRUQodm0sIHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFwbGFuKCkuaGFzV29yaygpKTsKIAogICAgIGlmIChwbGFuKCkuZmFp
bGVkKCkpIHsKQEAgLTc0LDExICs3MywxMSBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmluaXRpYWxpemUoCiAKICAgICAvLyBUaGUgY29kZSBhIG1vZHVsZSBlbWl0cyB0byBjYWxsIGlu
dG8gSlMgcmVsaWVzIG9uIHVzIHRvIHNldCB0aGlzIHVwLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3dhc21FeGl0U3R1YnMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGltcG9ydFdhc21U
b0pTU3R1YihtX2NhbGxlZUNvdW50LCBpKSA9IG1fd2FzbUV4aXRTdHVic1tpXS53YXNtVG9Kcy5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGkp
ID0gbV93YXNtRXhpdFN0dWJzW2ldLndhc21Ub0pzLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwogCi0gICAgcGxhbigpLmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSwgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgc2V0SlNFbnRyeXBvaW50
Q2FsbGVlKHZtLCBjYWxsZWVJbmRleCwganNFbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgc2V0
V2FzbUVudHJ5cG9pbnRDYWxsZWUodm0sIGNhbGxlZUluZGV4LCB3YXNtRW50cnlwb2ludENhbGxl
ZSk7CisgICAgcGxhbigpLmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIFJlZjxXYXNtOjpDYWxsZWU+JiYganNFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6Q2Fs
bGVlPiYmIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgIHNldEpTRW50cnlwb2ludENh
bGxlZShjYWxsZWVJbmRleCwgV1RGTW92ZShqc0VudHJ5cG9pbnRDYWxsZWUpKTsKKyAgICAgICAg
c2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUoY2FsbGVlSW5kZXgsIFdURk1vdmUod2FzbUVudHJ5cG9p
bnRDYWxsZWUpKTsKICAgICB9KTsKIAogICAgIG1fcGxhbiA9IG51bGxwdHI7CkBAIC0xMTgsOCAr
MTE3LDYgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjp2aXNpdENoaWxkcgogCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQgKiAyOyBpKyspCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXSk7CiAKICAgICB2aXNpdG9yLmFkZFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIoJnRoaXNPYmplY3QtPm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDkgKzI4LDEwIEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIlByb21p
c2VEZWZlcnJlZFRpbWVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGNyZWF0ZShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG93bmVyLCBX
YXNtOjpNZW1vcnlNb2RlIG1vZGUsIFJlZjxXYXNtOjpQbGFuPiYmIHBsYW4sIHVuc2lnbmVkIGNh
bGxlZUNvdW50LCB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KQogICAgIHsKLSAgICAgICAg
YXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaz4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2FsbGVlQ291bnQsIGZ1bmN0aW9uSW1w
b3J0Q291bnQpKSkgSlNXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgb3duZXIsIG1vZGUsIFdURk1v
dmUocGxhbiksIGNhbGxlZUNvdW50KTsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4odm0uaGVhcCwgYWxsb2Nh
dGlvblNpemUoZnVuY3Rpb25JbXBvcnRDb3VudCkpKSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKHZt
LCBvd25lciwgbW9kZSwgV1RGTW92ZShwbGFuKSwgY2FsbGVlQ291bnQpOwogICAgICAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBA
IC03NSw3MSArNzYsNjQgQEAgcHVibGljOgogICAgIFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgeyBB
U1NFUlQoIXJ1bm5hYmxlKCkpOyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KICAgICBib29sIGlz
U2FmZVRvUnVuKEpTV2ViQXNzZW1ibHlNZW1vcnkqKSBjb25zdDsKIAotICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBh
cmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCisgICAg
V2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1
bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNv
dW50KTsKLSAgICAgICAgcmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAg
ICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9Ci0KLSAgICBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIFdhc206OkNhbGxlZSYgd2Fz
bUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAgICAg
cmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgpOworICAg
ICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRdLmdldCgp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKFZNJiB2bSwgdW5zaWdu
ZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSkKKyAgICB2b2lkKiB3
YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KHVuc2lnbmVkIGltcG9ydEluZGV4KQogICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKLSAgICAg
ICAgY2FsbGVlcygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGltcG9ydEluZGV4IDwgbV93YXNtRXhpdFN0dWJzLnNpemUoKSk7Cisg
ICAgICAgIHJldHVybiBtX3dhc21FeGl0U3R1YnNbaW1wb3J0SW5kZXhdLndhc21Ub0pzLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAotICAgIHZvaWQgc2V0V2FzbUVudHJ5cG9p
bnRDYWxsZWUoVk0mIHZtLCB1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJseUNhbGxl
ZSogY2FsbGVlKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9KU1N0
dWIodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwotICAgICAgICBjYWxsZWVzKClbY2FsbGVlSW5k
ZXggKyBtX2NhbGxlZUNvdW50XS5zZXQodm0sIHRoaXMsIGNhbGxlZSk7CisgICAgICAgIHJldHVy
biBvZmZzZXRPZkltcG9ydFN0dWJzKCkgKyBzaXplb2Yodm9pZCopICogaW1wb3J0SW5kZXg7CiAg
ICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkNhbGxlZXMoKSk7IH0KLQotICAg
IHZvaWQqIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCitw
cml2YXRlOgorICAgIHZvaWQgc2V0SlNFbnRyeXBvaW50Q2FsbGVlKHVuc2lnbmVkIGNhbGxlZUlu
ZGV4LCBSZWY8V2FzbTo6Q2FsbGVlPiYmIGNhbGxlZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGltcG9ydEluZGV4IDwgbV93YXNtRXhpdFN0dWJzLnNpemUoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3dhc21FeGl0U3R1YnNbaW1wb3J0SW5kZXhdLndhc21Ub0pzLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2Fs
bGVlQ291bnQpOworICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92ZShjYWxs
ZWUpOwogICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbXBvcnRXYXNtVG9K
U1N0dWIodW5zaWduZWQgY2FsbGVlQ291bnQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHZv
aWQgc2V0V2FzbUVudHJ5cG9pbnRDYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZjxXYXNt
OjpDYWxsZWU+JiYgY2FsbGVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mQ2FsbGVl
cygpCi0gICAgICAgICAgICArIChzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxs
ZWU+KSAqIGNhbGxlZUNvdW50ICogMikKLSAgICAgICAgICAgICsgKHNpemVvZih2b2lkKikgKiBp
bXBvcnRJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZUluZGV4IDwgbV9jYWxs
ZWVDb3VudCk7CisgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleCArIG1fY2FsbGVlQ291bnRd
ID0gV1RGTW92ZShjYWxsZWUpOwogICAgIH0KIAotcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdhc206Ok1lbW9yeU1vZGUsIFJl
ZjxXYXNtOjpQbGFuPiYmLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7CiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZDYWxsZWVzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW1wb3J0U3R1
YnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxz
aXplb2Yodm9pZCopPihzaXplb2YoSlNXZWJBc3NlbWJseUNvZGVCbG9jaykpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgY2FsbGVlQ291bnQsIHVu
c2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQpCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSh1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9mZnNldE9mQ2FsbGVlcygpCi0gICAgICAgICAgICArIChzaXplb2YoV3JpdGVCYXJyaWVyPEpT
V2ViQXNzZW1ibHlDYWxsZWU+KSAqIGNhbGxlZUNvdW50ICogMikKLSAgICAgICAgICAgICsgKHNp
emVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50KTsKKyAgICAgICAgcmV0dXJuIG9mZnNl
dE9mSW1wb3J0U3R1YnMoKSArIHNpemVvZih2b2lkKikgKiBmdW5jdGlvbkltcG9ydENvdW50Owog
ICAgIH0KIAotICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIodW5zaWduZWQgY2FsbGVlQ291
bnQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorICAgIHZvaWQqJiBpbXBvcnRXYXNtVG9KU1N0dWIo
dW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2Fz
dDx2b2lkKio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZkltcG9ydFdhc21U
b0pTU3R1YihjYWxsZWVDb3VudCwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3
aXNlX2Nhc3Q8dm9pZCoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBv
cnRXYXNtVG9KU1N0dWIoaW1wb3J0SW5kZXgpKTsKICAgICB9CiAKICAgICBjbGFzcyBVbmNvbmRp
dGlvbmFsRmluYWxpemVyIDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7CkBA
IC0xNTAsNiArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1f
dW5jb25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7CiAgICAgVmVjdG9yPFdhc206Oldhc21FeGl0U3R1YnM+IG1fd2FzbUV4aXRTdHViczsK
KyAgICBWZWN0b3I8UmVmUHRyPFdhc206OkNhbGxlZT4+IG1fY2FsbGVlczsKICAgICAvLyBUaGUg
cGxhbiB0aGF0IGlzIGNvbXBpbGluZyB0aGlzIGNvZGUgYmxvY2suCiAgICAgUmVmUHRyPFdhc206
OlBsYW4+IG1fcGxhbjsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4o
c2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9CiAKKyAgICBXZWJBc3NlbWJseVRvSlNDYWxsZWUq
IHdlYkFzc2VtYmx5VG9KU0NhbGxlZSgpIHsgcmV0dXJuIG1fY2FsbGVlLmdldCgpOyB9CisKIHBy
b3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEw
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRl
ICJXYXNtUGxhbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMyArMzIsMTMgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVk
ZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
ICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC0xMjIsOCArMTIyLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNh
bGx5IHVzZSB0aGUgV2ViQXNzZW1ibHlGdW5jdGlvbiBhcyB0aGUgY2FsbGVlIHRvIGJlZ2luIHdp
dGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgogICAgIC8vIFRoZSByZWFzb24gZm9yIHRoaXMgaXMg
dGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1heSBzdGFjayBvdmVyZmxvdywgYW5kIHRoZSBz
dGFjayBvdmVyZmxvdwotICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9iamVj
dCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFzc2VtYmx5Q2FsbGVlIGRvZXNuJ3QgaGF2ZSBh
Ci0gICAgLy8gZ2xvYmFsIG9iamVjdCwgYnV0IHRoZSBXZWJBc3NlbWJseUZ1bmN0aW9uIGRvZXMu
CisgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNh
bGxlZS4KICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKICAgICBwcm90b0NhbGxG
cmFtZS5pbml0KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQs
IHJlbWFpbmluZ0FyZ3MpOwogCkBAIC0xNTgsMTIgKzE1NywxMiBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9
CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVu
Y3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwg
V2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhv
c3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpOwot
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB3YXNtRW50cnlwb2ludCwgc2lnbmF0dXJlSW5k
ZXgpOwotICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3Ro
LCBuYW1lLCBpbnN0YW5jZSwganNFbnRyeXBvaW50LCB3YXNtRW50cnlwb2ludCk7CisgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxX
ZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwgd2FzbUVudHJ5cG9pbnQsIHNpZ25h
dHVyZUluZGV4KTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUs
IGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0
aW9uLT5pc0xhcmdlQWxsb2NhdGlvbigpLCAiV2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgYmUg
YWxsb2NhdGVkIG5vdCBpbiBsYXJnZSBhbGxvY2F0aW9uIHNpbmNlIGl0IGlzIEpTQ2FsbGVlLiIp
OwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KQEAgLTE3NCw5ICsxNzMsMTAgQEAgU3RydWN0dXJl
KiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVTdAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5RnVu
Y3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVu
Y3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1i
bHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbTo6Q2FsbGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkK
LSAgICAsIG1fd2FzbUVudHJ5UG9pbnRDb2RlKHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCkp
CisgICAgLCBtX2pzRW50cnlwb2ludChqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpKQorICAgICwg
bV93YXNtRW50cnlwb2ludCh3YXNtRW50cnlwb2ludC5lbnRyeXBvaW50KCkpCiAgICAgLCBtX3Np
Z25hdHVyZUluZGV4KHNpZ25hdHVyZUluZGV4KQogeyB9CiAKQEAgLTE4NiwxOSArMTg2LDEzIEBA
IHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2luc3RhbmNlKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzRW50cnlw
b2ludCk7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV93YXNtRW50cnlwb2ludCk7
CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNh
bGxlZSoganNFbnRyeXBvaW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCkK
K3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVF
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7
Ci0gICAgQVNTRVJUKGpzRW50cnlwb2ludCAhPSB3YXNtRW50cnlwb2ludCk7Ci0gICAgbV9qc0Vu
dHJ5cG9pbnQuc2V0KHZtLCB0aGlzLCBqc0VudHJ5cG9pbnQpOwotICAgIG1fd2FzbUVudHJ5cG9p
bnQuc2V0KHZtLCB0aGlzLCB3YXNtRW50cnlwb2ludCk7Ci0gICAgQVNTRVJUKG1fd2FzbUVudHJ5
cG9pbnQtPmVudHJ5cG9pbnQoKSA9PSBtX3dhc21FbnRyeVBvaW50Q29kZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjE0ODY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKyNpbmNsdWRl
ICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDksMjkgKzQ5LDMxIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlv
biogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6Q2Fs
bGVlJiB3YXNtRW50cnlwb2ludCwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7
CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0YW5jZS5nZXQoKTsgfQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmVJbmRleDsgfQotICAgIHZvaWQqIHdhc21F
bnRyeXBvaW50KCkgeyByZXR1cm4gbV93YXNtRW50cnlQb2ludENvZGU7IH0KLSAgICB2b2lkKiBq
c0VudHJ5cG9pbnQoKSB7IHJldHVybiBtX2pzRW50cnlwb2ludC0+ZW50cnlwb2ludCgpOyB9Cisg
ICAgdm9pZCogd2FzbUVudHJ5cG9pbnQoKSB7IHJldHVybiBtX3dhc21FbnRyeXBvaW50OyB9Cisg
ICAgdm9pZCoganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0KIAogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2luc3RhbmNlKTsgfQotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlQb2ludENvZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV93YXNtRW50cnlQb2ludENvZGUpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1fd2FzbUVudHJ5cG9pbnQpOyB9CiAKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21FbnRyeXBvaW50KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6
U2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpDYWxs
ZWUmIHdhc21FbnRyeXBvaW50LCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgIHZvaWQqIG1fd2Fz
bUVudHJ5UG9pbnRDb2RlOyAvLyBDYWNoZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0aGUgd2FzbSAt
PiB3YXNtIHN0dWIgdG8gZG8gYSBzaW5nbGUgbG9hZCBhbmQganVtcCBpbnN0ZWFkIG9mIGhhdmlu
ZyBkZXBlbmRlbnQgbG9hZHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+
IG1fanNFbnRyeXBvaW50OwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBt
X3dhc21FbnRyeXBvaW50OworICAgIC8vIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0byB0aGVz
ZSBleGVjdXRhYmxlIGFkZHJlc3MgcG9pbnRlcnMgc2luY2UKKyAgICAvLyB3ZSBoYXZlIGEgR0Mg
cmVmZXJlbmNlIHRvIG91ciBpbnN0YW5jZSwgd2hpY2gga2VlcHMgYWxpdmUgdGhlIENvZGVCbG9j
aywKKyAgICAvLyB3aGljaCBvd25zIHRoaXMgcG9pbnRlci4KKyAgICB2b2lkKiBtX2pzRW50cnlw
b2ludDsKKyAgICB2b2lkKiBtX3dhc21FbnRyeXBvaW50OwogICAgIC8vIEl0J3Mgc2FmZSB0byBq
dXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVu
Y2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRo
YXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2ln
bmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxNDg2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxMSArMzMsMTEgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVQ
cm90b3R5cGUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCShyZXZpc2lvbiAyMTQ4NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw4
ICsxMjUsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAg
ICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4
b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAgICAgLy8gICAgIGIuIEFw
cGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4gZnVu
Yy4KLSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpD
YWxsZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAgICAgICBX
YXNtOjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAg
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNp
Z25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKICAgICAg
ICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGV4cC5maWVsZCwg
aW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25h
dHVyZUluZGV4KTsKQEAgLTE5Niw4ICsxOTYsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IGlu
c3RhbmNlLT5pbXBvcnRGdW5jdGlvbihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAg
ICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2lu
dENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAg
ICAgICAgICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5q
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRl
eFNwYWNlKTsKKyAgICAgICAgICAgIFdhc206OkNhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNFbnRyeXBv
aW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAg
ICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9
CkBAIC0yNzAsOCArMjcwLDggQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZh
bHVhdAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNtOjpDYWxs
ZWUmIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBXYXNt
OjpDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAg
ICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAw
LgogICAgICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxl
IGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNDg2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDE3LTA0LTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYkFzc2VtYmx5OiBKU1dlYkFzc2VtYmx5Q2FsbGVlIHNob3VsZCBub3QgYmUgYSBKU0Nl
bGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDEz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxlckRP
TVdpbmRvdyk6CisKIDIwMTctMDQtMDMgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1hbGlnbl0gQWRhcHQgcGxhY2UtY29udGVudCBhbGln
bm1lbnQgc2hvcnRoYW5kIHRvIHRoZSBuZXcgYmFzZWxpbmUgc3ludGF4CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDIx
NDg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNCwxMiArMzA0LDEyIEBAIERPTVdpbmRvdyYgY2FsbGVyRE9N
V2luZG93KEV4ZWNTdGF0ZSogZXgKICAgICAgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2
aXNpdG9yLT5jb2RlQmxvY2soKSkKICAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2
aXNpdG9yLT5jYWxsZWUoKS5yYXdQdHIoKSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENh
bGxlZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgogICAg
ICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFi
bHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9w
LW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTcyMQotICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgICAg
IGlmICh2aXNpdG9yLT5jYWxsZWUoKS5pc0NlbGwoKSAmJiB2aXNpdG9yLT5jYWxsZWUoKS5hc0Nl
bGwoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKS5hc0NlbGwoKSktPmdsb2JhbE9iamVj
dCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9u
ZTsKICAgICAgICAgfQo=
</data>
<flag name="review"
          id="327542"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>