<?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>174919</bug_id>
          
          <creation_ts>2017-07-27 19:38:07 -0700</creation_ts>
          <short_desc>Primitive auxiliaries and JSValue auxiliaries should have separate gigacages</short_desc>
          <delta_ts>2017-08-07 17:30:53 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>175141</dependson>
          <blocked>174917</blocked>
    
    <blocked>174920</blocked>
    
    <blocked>174922</blocked>
    
    <blocked>174923</blocked>
    
    <blocked>174924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1332833</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-27 19:38:07 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335795</commentid>
    <comment_count>1</comment_count>
      <attachid>317367</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 10:40:12 -0700</bug_when>
    <thetext>Created attachment 317367
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335801</commentid>
    <comment_count>2</comment_count>
      <attachid>317369</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 11:18:17 -0700</bug_when>
    <thetext>Created attachment 317369
it is written

Maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335805</commentid>
    <comment_count>3</comment_count>
      <attachid>317372</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 11:29:16 -0700</bug_when>
    <thetext>Created attachment 317372
starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335807</commentid>
    <comment_count>4</comment_count>
      <attachid>317373</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 11:43:51 -0700</bug_when>
    <thetext>Created attachment 317373
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335811</commentid>
    <comment_count>5</comment_count>
      <attachid>317374</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 12:09:50 -0700</bug_when>
    <thetext>Created attachment 317374
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335832</commentid>
    <comment_count>6</comment_count>
      <attachid>317385</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 15:29:14 -0700</bug_when>
    <thetext>Created attachment 317385
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335834</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-06 15:32:12 -0700</bug_when>
    <thetext>Attachment 317385 did not pass style-queue:


ERROR: Source/WTF/wtf/Gigacage.h:76:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:79:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:80:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:88:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:93:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:94:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:119:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:190:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:37:  g_primitiveGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:38:  g_jsValueGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/GPUBufferMetal.mm:52:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/BInline.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/bmalloc/bmalloc/Cache.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 13 in 55 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>1336016</commentid>
    <comment_count>8</comment_count>
      <attachid>317432</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 10:24:58 -0700</bug_when>
    <thetext>Created attachment 317432
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336017</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-07 10:27:05 -0700</bug_when>
    <thetext>Attachment 317432 did not pass style-queue:


ERROR: Source/WTF/wtf/Gigacage.h:76:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:79:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:80:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:88:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:93:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:94:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:119:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:190:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:37:  g_primitiveGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:38:  g_jsValueGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/GPUBufferMetal.mm:52:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/BInline.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/bmalloc/bmalloc/Cache.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 13 in 55 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>1336034</commentid>
    <comment_count>10</comment_count>
      <attachid>317432</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-08-07 10:55:36 -0700</bug_when>
    <thetext>Comment on attachment 317432
the patch

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

r=me.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11623
&gt; +        if (kind == Gigacage::Primitive) {
&gt; +            if (vm().primitiveGigacageEnabled().isStillValid())
&gt; +                m_graph.watchpoints().addLazily(vm().primitiveGigacageEnabled());
&gt; +            else
&gt; +                return ptr;

Just to double check. We don&apos;t need this for the JSValue Gigacage because it cannot be disabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336128</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 14:24:21 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #10)
&gt; Comment on attachment 317432 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=317432&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11623
&gt; &gt; +        if (kind == Gigacage::Primitive) {
&gt; &gt; +            if (vm().primitiveGigacageEnabled().isStillValid())
&gt; &gt; +                m_graph.watchpoints().addLazily(vm().primitiveGigacageEnabled());
&gt; &gt; +            else
&gt; &gt; +                return ptr;
&gt; 
&gt; Just to double check. We don&apos;t need this for the JSValue Gigacage because it
&gt; cannot be disabled?

Yup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336129</commentid>
    <comment_count>12</comment_count>
      <attachid>317465</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 14:24:49 -0700</bug_when>
    <thetext>Created attachment 317465
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336133</commentid>
    <comment_count>13</comment_count>
      <attachid>317467</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 14:27:57 -0700</bug_when>
    <thetext>Created attachment 317467
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336137</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 14:30:48 -0700</bug_when>
    <thetext>I think I fixed the Windows build issues, but now Windows EWS has gone away.

I&apos;ll land and ask questions later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336138</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-07 14:31:54 -0700</bug_when>
    <thetext>Attachment 317467 did not pass style-queue:


ERROR: Source/WTF/wtf/Gigacage.h:76:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:79:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:80:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:88:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:93:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Gigacage.h:94:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:119:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayBuffer.cpp:190:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:37:  g_primitiveGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/bmalloc/bmalloc/Gigacage.cpp:38:  g_jsValueGigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/Gigacage.cpp:36:  g_gigacageBasePtr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/cocoa/GPUBufferMetal.mm:52:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/BInline.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/bmalloc/bmalloc/Cache.cpp:26:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 14 in 55 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>1336140</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-07 14:32:29 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/220352/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336141</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-07 14:32:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/33761863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336278</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-08-07 17:22:44 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #16)
&gt; Landed in https://trac.webkit.org/changeset/220352/webkit

It seems this has caused around 3600 new failures on the Linux JSC tests.

* GTK+ test run at r220351 (jscore-test step green) https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/2495
* GTK+ test run at r220352 (3645 JSC tests failed) https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/2496

* WPE test run at r220351 (jscore-test step green) https://build.webkit.org/builders/WPE%20Linux%2064-bit%20Release%20%28Tests%29/builds/1922
* WPE test run at r220352 (3623 JSC tests failed) https://build.webkit.org/builders/WPE%20Linux%2064-bit%20Release%20%28Tests%29/builds/1923</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1336285</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-08-07 17:30:53 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #18)
&gt; (In reply to Filip Pizlo from comment #16)
&gt; &gt; Landed in https://trac.webkit.org/changeset/220352/webkit
&gt; 
&gt; It seems this has caused around 3600 new failures on the Linux JSC tests.
&gt; 
&gt; * GTK+ test run at r220351 (jscore-test step green)
&gt; https://build.webkit.org/builders/GTK%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/2495
&gt; * GTK+ test run at r220352 (3645 JSC tests failed)
&gt; https://build.webkit.org/builders/GTK%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/2496
&gt; 
&gt; * WPE test run at r220351 (jscore-test step green)
&gt; https://build.webkit.org/builders/WPE%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/1922
&gt; * WPE test run at r220352 (3623 JSC tests failed)
&gt; https://build.webkit.org/builders/WPE%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/1923

And r220368 fixed it? WPE bot is back to green after it: https://build.webkit.org/builders/WPE%20Linux%2064-bit%20Release%20%28Tests%29/builds/1928</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317367</attachid>
            <date>2017-08-06 10:40:12 -0700</date>
            <delta_ts>2017-08-06 11:18:17 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34400</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDYgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKQotewotICAgIHN0YXRpYyBGYXN0TWFsbG9jQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciogcmVzdWx0OwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZSgKLSAgICAgICAgb25jZUZsYWcsCi0gICAgICAg
IFtdIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdDsKLX0KLQogRmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjIw
MzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTcgKzMxLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA6IHB1Ymxp
YyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3ImIGluc3RhbmNlKCk7Ci0K
KyAgICBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwogICAgIH5GYXN0TWFsbG9j
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwogICAgIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxp
Z25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgRmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdh
Y2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKIAotI2luY2x1ZGUg
PG11dGV4PgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgotCiBuYW1lc3BhY2UgSlNDIHsKIAot
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKiByZXN1bHQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAg
IHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlRmxhZywKLSAgICAgICAgW10gewotICAgICAg
ICAgICAgcmVzdWx0ID0gbmV3IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwotICAg
ICAgICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdDsKLX0KLQotR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQorR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoR2lnYWNh
Z2U6OktpbmQga2luZCkKKyAgICA6IG1fa2luZChraW5kKQogewogfQogCkBAIC01MywxNyArMzks
MTcgQEAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+R2lnYWNhZwogCiB2b2lkKiBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gR2lnYWNhZ2U6OnRy
eUFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsKKyAgICByZXR1cm4gR2lnYWNhZ2U6OnRy
eUFsaWduZWRNYWxsb2MobV9raW5kLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiB2b2lkIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRNZW1vcnkodm9pZCogYmFzZVB0
cikKIHsKLSAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUoYmFzZVB0cik7CisgICAgR2lnYWNhZ2U6
OmFsaWduZWRGcmVlKG1fa2luZCwgYmFzZVB0cik7CiB9CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0
LnByaW50KCJHaWdhY2FnZSIpOworICAgIG91dC5wcmludChHaWdhY2FnZTo6bmFtZShtX2tpbmQp
LCAiR2lnYWNhZ2UiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDE2ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJl
IGEgc2luZ2xldG9uLiBUaGVyZSBzaG91bGQgYmUgZGlmZmVyZW50IGluc3RhbmNlcyBmb3IgcHJp
bWFyaWVzLCBKU1ZhbHVlcywKLSAgICAvLyBhbmQgb3RoZXIgdGhpbmdzLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5MTkKLSAgICBzdGF0aWMgR2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0YW5jZSgpOwotCisgICAgR2lnYWNhZ2VB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdpZ2FjYWdlOjpLaW5kKTsKICAgICB+R2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAgCiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVk
TWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBvdmVycmlkZTsKQEAgLTQ0LDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcml2YXRlOgotICAgIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwor
ICAgIEdpZ2FjYWdlOjpLaW5kIG1fa2luZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsMTUgKzE2NSwxOSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX3J1bkxvb3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogI2VuZGlmIC8vIFVTRShD
RikKICAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCi0gICAgLCBhdXhpbGlhcnlTcGFjZSgiQXV4
aWxpYXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9u
LCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgJkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
aW5zdGFuY2UoKSkKLSAgICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgJkZhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgZGVzdHJ1Y3Rp
YmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgJkZhc3RNYWxsb2NBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgc3RyaW5nU3BhY2UoIkpTU3Ry
aW5nIiwgaGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgp
KQotICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Iiwg
aGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAg
ICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNE
ZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6Omluc3RhbmNlKCkpCi0gICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKHN0ZDo6
bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCisgICAgLCBw
cmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCisgICAgLCBqc1ZhbHVlR2ln
YWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlU3BhY2Uo
IlByaW1pdGl2ZUdpZ2FjYWdlIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVl
ZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxv
Y2F0b3IuZ2V0KCkpCisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VTcGFjZSgiSlNWYWx1ZUdpZ2FjYWdl
IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFw
Q2VsbDo6QXV4aWxpYXJ5KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQorICAgICwg
Y2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVk
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgp
KQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVh
cCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmlu
ZyIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVP
YmplY3RTcGFjZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVh
Z2VybHkgU3dlcHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNl
KCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0
YSgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw2ICs5NSw4IEBAIGNsYXNzIERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIEV4
ZWNTdGF0ZTsKIGNsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4Y2VwdGlvblNjb3BlOworY2xhc3Mg
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsK
IGNsYXNzIFR5cGVQcm9maWxlckxvZzsKQEAgLTI4NSw3ICsyODcsMTIgQEAgcHJpdmF0ZToKIHB1
YmxpYzoKICAgICBIZWFwIGhlYXA7CiAgICAgCi0gICAgU3Vic3BhY2UgYXV4aWxpYXJ5U3BhY2U7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBt
X2Zhc3RNYWxsb2NBbGxvY2F0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcj4gbV9wcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2pzVmFsdWVHaWdh
Y2FnZUFsbG9jYXRvcjsKKyAgICAKKyAgICBTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZVNwYWNl
OworICAgIFN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZVNwYWNlOwogICAgIAogICAgIC8vIFdoZW5l
dmVyIHBvc3NpYmxlLCB1c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9m
IHRoZXNlIHN1YnNwYWNlcy4KICAgICBTdWJzcGFjZSBjZWxsU3BhY2U7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR2lnYWNh
Z2UuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY29uc3Qgdm9pZCogZ19naWdhY2FnZUJh
c2VQdHI7CiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKLXZvaWQqIHRyeU1hbGxvYyhzaXplX3Qg
c2l6ZSkKK3ZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBhdXRvIHJl
c3VsdCA9IHRyeUZhc3RNYWxsb2Moc2l6ZSk7CiAgICAgdm9pZCogcmVhbFJlc3VsdDsKQEAgLTQ3
LDEyICs0NywxMiBAQCB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKHNpemVfdCBzaXplKQor
dm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUpCiB7CiAgICAg
cmV0dXJuIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZSk7CiB9CiAKLXZvaWQg
ZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgZnJlZVZp
cnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBPU0Fs
bG9jYXRvcjo6cmVsZWFzZURlY29tbWl0dGVkKGJhc2VQdHIsIHNpemUpOwogfQpAQCAtNjcsNDIg
KzY3LDQyIEBAIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAvLyBhbmQgc3RheSBzY3JhbWJsZWQgZXhj
ZXB0IGp1c3QgYmVmb3JlIHVzZS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzUwMzUKIAotdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsaWduZWRNYWxsb2MoS2luZCBraW5kLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjph
cGk6OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2Fj
YWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdu
bWVudCwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJG
ZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgYWxpZ25lZEZyZWUodm9pZCog
cCkKK3ZvaWQgYWxpZ25lZEZyZWUoS2luZCBraW5kLCB2b2lkKiBwKQogewotICAgIGJtYWxsb2M6
OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIGJtYWxsb2M6
OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxl
ckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeU1h
bGxvYyhLaW5kIGtpbmQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxs
b2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxvYzo6
aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgZnJlZSh2b2lkKiBwKQordm9pZCBmcmVlKEtpbmQga2luZCwgdm9p
ZCogcCkKIHsKLSAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6Okdp
Z2FjYWdlKTsKKyAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6aGVhcEtpbmQoa2lu
ZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCi12b2lkKiB0cnlBbGxvY2F0ZVZp
cnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtp
bmQga2luZCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBp
Ojp0cnlMYXJnZU1lbWFsaWduVmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6
OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0
cnlMYXJnZU1lbWFsaWduVmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6Omhl
YXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90KQor
dm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQga2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90KQog
ewotICAgIGJtYWxsb2M6OmFwaTo6ZnJlZUxhcmdlVmlydHVhbChiYXNlUHRyLCBibWFsbG9jOjpI
ZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZUxhcmdlVmlydHVhbChi
YXNlUHRyLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNl
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dU
Ri93dGYvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDQ3IEBAIGV4dGVy
biBXVEZfRVhQT1JUREFUQSBjb25zdCB2b2lkKiBnX2dpZ2EKIAogbmFtZXNwYWNlIEdpZ2FjYWdl
IHsKIAorZW51bSBLaW5kIHsKKyAgICBQcmltaXRpdmUsCisgICAgSlNWYWx1ZQorfTsKKwogaW5s
aW5lIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKSB7IH0KLWlubGluZSB2b2lkIGRpc2FibGVHaWdhY2Fn
ZSgpIHsgfQoraW5saW5lIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkgeyB9CiBpbmxp
bmUgYm9vbCBzaG91bGRCZUVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQogCi1pbmxpbmUgdm9p
ZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikgeyB9Ci1pbmxpbmUg
dm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikgeyB9Citp
bmxpbmUgdm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2
b2lkKikgeyB9CitpbmxpbmUgdm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9p
ZCAoKikodm9pZCopLCB2b2lkKikgeyB9CisKK0FMV0FZU19JTkxJTkUgY29uc3QgY2hhciogbmFt
ZShLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6
CisgICAgICAgIHJldHVybiAiUHJpbWl0aXZlIjsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAg
IHJldHVybiAiSlNWYWx1ZSI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZComIGJhc2VQ
dHIoS2luZCkKK3sKKyAgICByZXR1cm4gZ19naWdhY2FnZUJhc2VQdHI7Cit9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY2FnZWQoVCogcHRyKSB7IHJldHVybiBwdHI7IH0KK2lu
bGluZSBUKiBjYWdlZChLaW5kLCBUKiBwdHIpIHsgcmV0dXJuIHB0cjsgfQogCi1pbmxpbmUgYm9v
bCBpc0NhZ2VkKGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgaXND
YWdlZChLaW5kLCBjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KIAotaW5saW5lIHZvaWQq
IHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsgcmV0dXJu
IHRyeUZhc3RBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0KLWlubGluZSB2b2lkIGFs
aWduZWRGcmVlKHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKTsKLWlubGluZSB2b2lkIGZyZWUodm9p
ZCogcCkgeyBmYXN0RnJlZShwKTsgfQoraW5saW5lIHZvaWQqIHRyeUFsaWduZWRNYWxsb2MoS2lu
ZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIHRyeUZhc3RBbGlnbmVk
TWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0KK2lubGluZSB2b2lkIGFsaWduZWRGcmVlKEtpbmQs
IHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKTsKK2lubGluZSB2b2lkIGZyZWUoS2luZCwg
dm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5
QWxsb2NhdGVWaXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNp
emUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lk
KiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZWxz
ZQpAQCAtNjMsMTMgKzg1LDEzIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFs
UGFnZXMKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQq
IHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpOwotV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUodm9pZCopOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHRyeU1hbGxvYyhzaXplX3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZSh2
b2lkKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhLaW5kLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
bGlnbmVkRnJlZShLaW5kLCB2b2lkKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFs
bG9jKEtpbmQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlKEtpbmQsIHZv
aWQqKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2Vz
KHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMo
dm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90IHNp
emUpOwogCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICA6IG1fYnVp
bHRpbkZ1bmN0aW9ucyh2bSkKICAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKLSAgICAsIG1fb3V0
cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQi
LCB2bS5oZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkp
Ci0gICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9i
YWwgT2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgJkZhc3RNYWxsb2NBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQorICAgICwgbV9vdXRwdXRDb25zdHJhaW50
U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZt
LmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENv
bnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50
Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKIHsKIH0KIApJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAJCTE0REQ3OEM2
MThGNDhENzUwMDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjUyMThCQTg4QTAwMDc2RkEzRiAvKiBBc3luY1Rh
c2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJB
c3NlcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3
OSAvKiBGaXhlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYwMTg5RENFMUUw
MDU0NkQ2OCAvKiBJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogQklubGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjAxODlEQ0Ux
RTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzhDQTE4RjQ4RDc1MDA5NTA3MDIgLyogTXV0ZXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NERDRUQ2MTdBNjQ5
RDkwMDkzQjJGMiAvKiBNdXRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OENCMThGNDhENzUwMDk1MDcwMiAvKiBQZXJQcm9jZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NkEwNzE3
QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENDMThGNDhENzUwMDk1MDcwMiAvKiBQZXJU
aHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQsNyArOTQsNyBAQAogCQkxNDBGQTAw
MjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEJ1bXBSYW5nZS5oOyBwYXRoID0gYm1hbGxvYy9CdW1wUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVN
ZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaW5lTWV0YWRhdGEu
aDsgcGF0aCA9IGJtYWxsb2MvTGluZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9iamVjdFR5cGUuY3BwOyBwYXRoID0gYm1h
bGxvYy9PYmplY3RUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxM0U0
NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJbmxpbmUuaDsgcGF0aCA9IGJtYWxsb2MvSW5saW5lLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBCSW5saW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJJbmxpbmUuaDsgcGF0aCA9IGJtYWxsb2Mv
QklubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNE
MDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxp
bmVFbmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1w
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVE
RTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEJBc3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyogU3lzY2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxsLmg7IHBhdGggPSBibWFsbG9jL1N5c2Nh
bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NywxMCArMjg3LDEwIEBACiAJ
CQkJNjU5OUM1Q0IxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5oICovLAogCQkJ
CTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8sCiAJCQkJMEY1QkYxNzIx
RjIzQzU3MTAwMjlEOTFEIC8qIEJFeHBvcnQuaCAqLywKKwkJCQkxNDEzRTQ2MDE4OURDRTFFMDA1
NDZENjggLyogQklubGluZS5oICovLAogCQkJCTE0QzkxOUM4MThGQ0M1OUYwMDI4REI0MyAvKiBC
UGxhdGZvcm0uaCAqLywKIAkJCQkxNEQ5REI0NTE3RjI0NDcxMDBFQUFCNzkgLyogRml4ZWRWZWN0
b3IuaCAqLywKIAkJCQkwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCAqLywK
LQkJCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5saW5lLmggKi8sCiAJCQkJMTQxRDlB
RkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLywKIAkJCQk0NDI2RTI3RTFDODM4RUUwMDA4
RUIwNDIgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQyIC8q
IExvZ2dpbmcuaCAqLywKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkJCTE0REQ3OEM4MThGNDhENzUw
MDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMDI3NDkxOEY4
OUMxMzAwMTE1Qzk3IC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUJGMTQ5MUYyMkE4
RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2luZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4Qzkx
OEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRERDc4Qzkx
OEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NEMwN0Y1
MUM3QjcwMjYwMDUxQkI2QSAvKiBMYXJnZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDODk5
MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjZGVmaW5lIEFzeW5jVGFza19oCiAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCi0j
aW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIk11dGV4
LmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlIDxhdG9taWM+CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0JJbmxpbmUuaAkocmV2aXNpb24gMjIwMzIzKQkoZnJvbSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lubGluZS5oOjIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmxpbmVfaAorI2RlZmluZSBJbmxp
bmVfaAorCisjZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5s
aW5lCisKKyNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKworI2Vu
ZGlmIC8vIElubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkocmV2aXNpb24g
MjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDExICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJ
bmxpbmVfaAotI2RlZmluZSBJbmxpbmVfaAorI2lmbmRlZiBCSW5saW5lX2gKKyNkZWZpbmUgQklu
bGluZV9oCiAKLSNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBp
bmxpbmUKKyNkZWZpbmUgQklOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5s
aW5lCiAKLSNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZp
bmUgQk5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCiAKLSNlbmRpZiAvLyBJbmxp
bmVfaAorI2VuZGlmIC8vIEJJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisj
aW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIklubGluZS5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNw
YWNlIGJtYWxsb2MgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAi
QkFzc2VydC5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2lu
Y2x1ZGUgIkRlYWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdIZWFwLmgiCiAjaW5jbHVkZSAi
SGVhcC5oIgotI2luY2x1ZGUgIklubGluZS5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1
ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0dpZ2FjYWdlLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9HaWdhY2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAog
Ly8gRklYTUU6IEFzayBkeWxkIHRvIHB1dCB0aGlzIGluIGl0cyBvd24gcGFnZSwgYW5kIG1wcm90
ZWN0IHRoZSBwYWdlIGFmdGVyIHdlIGVuc3VyZSB0aGUgZ2lnYWNhZ2UuCiAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTcyCi12b2lkKiBnX2dpZ2FjYWdlQmFz
ZVB0cjsKK3ZvaWQqIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyOwordm9pZCogZ19qc1ZhbHVl
R2lnYWNhZ2VCYXNlUHRyOwogCiB1c2luZyBuYW1lc3BhY2UgYm1hbGxvYzsKIApAQCAtNTMsOCAr
NTQsOCBAQCBzdHJ1Y3QgQ2FsbGJhY2sgewogICAgIHZvaWQqIGFyZ3VtZW50IHsgbnVsbHB0ciB9
OwogfTsKIAotc3RydWN0IENhbGxiYWNrcyB7Ci0gICAgQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mKSB7IH0KK3N0cnVjdCBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzIHsK
KyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mKSB7IH0KICAgICAKICAgICBWZWN0b3I8Q2FsbGJhY2s+IGNhbGxiYWNrczsKIH07CkBAIC02
OSwzNSArNzAsNDAgQEAgdm9pZCBlbnN1cmVHaWdhY2FnZSgpCiAgICAgICAgICAgICBpZiAoIXNo
b3VsZEJlRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgdm9pZCogYmFzZVB0ciA9IHRyeVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwg
R0lHQUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldBWSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2VQ
dHIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2
bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKGJhc2VQdHIsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FH
RV9SVU5XQVkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBnX2dpZ2FjYWdlQmFzZVB0ciA9
IGJhc2VQdHI7CisgICAgICAgICAgICBmb3JFYWNoS2luZCgKKyAgICAgICAgICAgICAgICBbJl0g
KEtpbmQga2luZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmFuZG9taXplIHdo
ZXJlIHRoaXMgZ29lcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTI0NQorICAgICAgICAgICAgICAgICAgICBiYXNlUHRy
KGtpbmQpID0gdHJ5Vk1BbGxvY2F0ZShHSUdBQ0FHRV9TSVpFLCBHSUdBQ0FHRV9TSVpFICsgR0lH
QUNBR0VfUlVOV0FZKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlUHRyKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBDb3VsZCBub3QgYWxs
b2NhdGUgJXMgZ2lnYWNhZ2UuXG4iLCBuYW1lKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJDUkFTSCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKGJhc2VQdHIo
a2luZCksIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKICNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECiB9CiAKLXZvaWQg
ZGlzYWJsZUdpZ2FjYWdlKCkKK3ZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkKIHsKICAg
ICBlbnN1cmVHaWdhY2FnZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIpIHsKKyAgICBp
ZiAoIWdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0IHdhcyBuZXZl
ciBlbmFibGVkLiBUaGF0IG1lYW5zIHRoYXQgd2UgbmV2ZXIgZXZlbiBzYXZlZCBhbnkgY2FsbGJh
Y2tzLiBPciwgd2UgaGFkIGFscmVhZHkgZGlzYWJsZWQKICAgICAgICAgLy8gaXQgYmVmb3JlLCBh
bmQgYWxyZWFkeSBjYWxsZWQgdGhlIGNhbGxiYWNrcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46
OmdldCgpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2Vz
czxDYWxsYmFja3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBj
YWxsYmFja3MgPSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7
CisgICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1p
dGl2ZURpc2FibGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxs
YmFjayA6IGNhbGxiYWNrcy5jYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNh
bGxiYWNrLmFyZ3VtZW50KTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKICAg
ICBnX2dpZ2FjYWdlQmFzZVB0ciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgYWRkRGlzYWJsZUNhbGxi
YWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgYWRkUHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1
bWVudCkKIHsKICAgICBlbnN1cmVHaWdhY2FnZSgpOwogICAgIGlmICghZ19naWdhY2FnZUJhc2VQ
dHIpIHsKQEAgLTEwNiwxNSArMTEyLDE1IEBAIHZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQg
KCpmdW5jdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBDYWxsYmFja3Mm
IGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgpOwotICAgIHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxsYmFja3M+OjptdXRleCgp
KTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2Vz
czxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAgc3RkOjp1bmlxdWVfbG9j
azxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+
OjptdXRleCgpKTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2FsbGJhY2soZnVuY3Rp
b24sIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgcmVtb3ZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpm
dW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKIHsK
LSAgICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgp
OwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxs
YmFja3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFj
a3MgPSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAg
c3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURp
c2FibGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNh
bGxiYWNrcy5jYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGNhbGxiYWNrcy5j
YWxsYmFja3NbaV0uZnVuY3Rpb24gPT0gZnVuY3Rpb24KICAgICAgICAgICAgICYmIGNhbGxiYWNr
cy5jYWxsYmFja3NbaV0uYXJndW1lbnQgPT0gYXJndW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkJFeHBvcnQuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgi
CiAjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KIApAQCAtNDQs
MjMgKzQ1LDYwIEBACiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMAogI2VuZGlmCiAKLWV4dGVy
biAiQyIgQkVYUE9SVCB2b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK2V4dGVybiAiQyIgQkVYUE9S
VCB2b2lkKiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK2V4dGVybiAiQyIgQkVYUE9SVCB2
b2lkKiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAK
K2VudW0gS2luZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpTVmFsdWUKK307CisKIEJFWFBPUlQg
dm9pZCBlbnN1cmVHaWdhY2FnZSgpOwogCi1CRVhQT1JUIHZvaWQgZGlzYWJsZUdpZ2FjYWdlKCk7
CitCRVhQT1JUIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCk7CisKKy8vIFRoaXMgd2ls
bCBjYWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGlmIHRoZSBQcmltaXRpdmUg
R2lnYWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgorQkVYUE9SVCB2b2lkIGFkZFByaW1pdGl2
ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKK0JFWFBPUlQgdm9pZCBy
ZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7CisK
K0lOTElORSBjb25zdCBjaGFyKiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIFByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOworICAg
IGNhc2UgSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAgQkNS
QVNIKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0lOTElORSB2b2lkKiYgYmFzZVB0cihL
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6Cisg
ICAgICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKKyAgICBjYXNlIEpTVmFs
dWU6CisgICAgICAgIHJldHVybiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CisgICAgfQorICAg
IEJDUkFTSCgpOworICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK30KIAot
Ly8gVGhpcyB3aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhl
IEdpZ2FjYWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KLUJFWFBPUlQgdm9pZCBhZGREaXNhYmxl
Q2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Ci1CRVhQT1JUIHZvaWQgcmVtb3ZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK3ZvaWQgZm9yRWFjaEtpbmQoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmdW5jKFBy
aW1pdGl2ZSk7CisgICAgZnVuYyhKU1ZhbHVlKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LVQqIGNhZ2VkKFQqIHB0cikKK0lOTElORSBUKiBjYWdlZChLaW5kIGtpbmQsIFQqIHB0cikKIHsK
ICAgICBCQVNTRVJUKHB0cik7Ci0gICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyID0gZ19naWdhY2Fn
ZUJhc2VQdHI7CisgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyID0gYmFzZVB0cihraW5kKTsKICAg
ICBpZiAoIWdpZ2FjYWdlQmFzZVB0cikKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxUKj4oCkBAIC02OCw5ICsxMDYsOSBAQCBUKiBjYWdlZChUKiBwdHIp
CiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSAmIHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oR0lHQUNBR0VfTUFTSykpKTsKIH0KIAotaW5saW5lIGJvb2wgaXNDYWdl
ZChjb25zdCB2b2lkKiBwdHIpCitJTkxJTkUgYm9vbCBpc0NhZ2VkKEtpbmQga2luZCwgY29uc3Qg
dm9pZCogcHRyKQogewotICAgIHJldHVybiBjYWdlZChwdHIpID09IHB0cjsKKyAgICByZXR1cm4g
Y2FnZWQoa2luZCwgcHRyKSA9PSBwdHI7CiB9CiAKIEJFWFBPUlQgYm9vbCBzaG91bGRCZUVuYWJs
ZWQoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCBIZWFwOjpIZWFwKEhlYXBLaW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAKIGJvb2wg
SGVhcDo6dXNpbmdHaWdhY2FnZSgpCiB7Ci0gICAgcmV0dXJuIG1fa2luZCA9PSBIZWFwS2luZDo6
R2lnYWNhZ2UgJiYgZ19naWdhY2FnZUJhc2VQdHI7CisgICAgcmV0dXJuIGlzR2lnYWNhZ2UobV9r
aW5kKSAmJiBnX2dpZ2FjYWdlQmFzZVB0cjsKIH0KIAogdm9pZCBIZWFwOjppbml0aWFsaXplTGlu
ZU1ldGFkYXRhKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHJldmlzaW9uIDIy
MDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTQgKzI1LDU5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQkFzc2Vy
dC5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKKyNpbmNsdWRlICJHaWdhY2FnZS5oIgorCiBuYW1l
c3BhY2UgYm1hbGxvYyB7CiAKIGVudW0gY2xhc3MgSGVhcEtpbmQgewogICAgIFByaW1hcnksCi0g
ICAgR2lnYWNhZ2UKKyAgICBQcmltaXRpdmVHaWdhY2FnZSwKKyAgICBKU1ZhbHVlR2lnYWNhZ2UK
IH07CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtSGVhcHMgPSAyOworc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDM7CisKK0lOTElORSBib29sIGlzR2lnYWNhZ2Uo
SGVhcEtpbmQgaGVhcEtpbmQpCit7CisgICAgc3dpdGNoIChoZWFwS2luZCkgeworICAgIGNhc2Ug
SGVhcEtpbmQ6OlByaW1hcnk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEhlYXBL
aW5kOjpQcmltaXRpdmVHaWdhY2FnZToKKyAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNh
Z2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0lOTElORSBHaWdhY2FnZTo6S2luZCBnaWdhY2FnZUtpbmQoSGVhcEtp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmlt
YXJ5OgorICAgICAgICBCQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRp
dmU7CisgICAgY2FzZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgICAgIHJldHVy
biBHaWdhY2FnZTo6UHJpbWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2Fn
ZToKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpKU1ZhbHVlOworICAgIH0KKyAgICBCQ1JBU0go
KTsKKyAgICByZXR1cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsKK30KKworSU5MSU5FIEhlYXBLaW5k
IGhlYXBLaW5kKEdpZ2FjYWdlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBHaWdhY2FnZTo6UHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gSGVhcEtpbmQ6OlBy
aW1pdGl2ZUdpZ2FjYWdlOworICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CisgICAgICAgIHJl
dHVybiBIZWFwS2luZDo6SlNWYWx1ZUdpZ2FjYWdlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAg
ICByZXR1cm4gSGVhcEtpbmQ6OlByaW1hcnk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShub25leGlzdGVudCkKQEAgLTEsMzMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IElubGluZV9oCi0jZGVmaW5lIElubGluZV9oCi0KLSNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRl
X18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKLQotI2RlZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1
dGVfXygobm9pbmxpbmUpKQotCi0jZW5kaWYgLy8gSW5saW5lX2gKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9N
YXAuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBNYXBfaAogI2RlZmluZSBN
YXBfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1
ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvUGVyUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvUGVyUHJvY2Vzcy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1BlclByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBQZXJQcm9jZXNzX2gKICNkZWZpbmUgUGVyUHJvY2Vzc19oCiAKLSNpbmNsdWRlICJJbmxpbmUu
aCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlICJT
dGF0aWNNdXRleC5oIgogI2luY2x1ZGUgPG11dGV4PgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9QZXJUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Bl
clRocmVhZC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Bl
clRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFBlclRo
cmVhZF9oCiAjZGVmaW5lIFBlclRocmVhZF9oCiAKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5j
bHVkZSAiQlBsYXRmb3JtLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVySGVh
cEtpbmQuaCIKICNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgVmVjdG9yX2gKICNkZWZpbmUgVmVjdG9yX2gKIAotI2luY2x1ZGUgIklubGluZS5oIgor
I2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8
Y3N0ZGRlZj4KICNpbmNsdWRlIDxjc3RyaW5nPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317369</attachid>
            <date>2017-08-06 11:18:17 -0700</date>
            <delta_ts>2017-08-06 11:29:16 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7
CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3IobmV3U2l6ZSk7CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgICAgICAgICAvLyBZdWNr
LCB0aGlzIGNhc2Ugd291bGQgc3VjayEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09i
amUKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogICAgIAog
ICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgeworICAgICAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2ln
YWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gy
R1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCkBAIC03ODY4LDcgKzc4NjgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNp
emUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRvckZvcihzaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0
LnZtKCktPmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRvckZvcihzaXplKTsKIAogICAgIGlm
ICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CkBAIC03OTEzLDcgKzc5MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICog
b3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5z
aXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAg
ICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5hdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3IobmV3
U2l6ZSk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZp
b3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ5NCw3ICs4NDk0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBtX2ppdC5h
bmQzMihUcnVzdGVkSW1tMzIofjcpLCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+
YXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCisgICAgICAgIHN0b3JhZ2VH
UFIsIG1faml0LnZtKCktPnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIsCiAgICAgICAgIHNjcmF0Y2hHUFIyLCBzbG93Q2FzZXMpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNpemVHUFIpOwpAQCAtMTAxMTIsNyArMTAxMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVCdXR0ZXJmCiAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMy
KDMpLCBzY3JhdGNoMSk7CiAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRl
eGluZ0hlYWRlcikpLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG1faml0LmVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAgIHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmF1
eGlsaWFyeVNwYWNlLCBzY3JhdGNoMiwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOwor
ICAgICAgICBzdG9yYWdlUmVzdWx0R1BSLCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VTcGFj
ZSwgc2NyYXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5h
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0
R1BSKTsKIAogICAgIG1faml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlc3VsdEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRw
dHJfdD4oNykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUg
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmF1eGlsaWFyeVNwYWNlLCBieXRlU2l6
ZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
clNpemUodm0oKS5wcmltaXRpdmVHaWdhY2FnZVNwYWNlLCBieXRlU2l6ZSwgc2xvd0Nhc2UpOwog
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwg
c2xvd0Nhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzcGxhdFdvcmRzKApAQCAtOTA0
OSw3ICs5MDQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBu
b0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhl
YXBDZWxsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxp
YXJ5U3BhY2UsIGJ1dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZVNwYWNlLCBidXR0ZXJmbHlTaXpl
LCBzbG93UGF0aCksCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAgICAgICAg
ICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCkBAIC0xMDAwNSw3
ICsxMDAwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6
ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Io
c2l6ZUluQnl0ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCku
anNWYWx1ZUdpZ2FjYWdlU3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5dGVzKTsKICAgICAgICAg
TFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0
cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3Jh
Z2UpKTsKQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGJ1
dHRlcmZseVNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3Bh
Y2UsIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvclNpemUodm0oKS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZSwgYnV0dGVyZmx5U2l6
ZSwgZmFpbENhc2UpOwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhl
YXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgIExWYWx1
ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKQEAgLTExNjE0LDM0ICsxMTYxNCwzNSBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIExWYWx1ZSBjYWdlZChMVmFsdWUgcHRy
KQorICAgIExWYWx1ZSBjYWdlZChLaW5kIGtpbmQsIExWYWx1ZSBwdHIpCiAgICAgewotICAgICAg
ICBpZiAodm0oKS5naWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBtX291dC5jb25z
dEludFB0cihnX2dpZ2FjYWdlQmFzZVB0cik7Ci0gICAgICAgICAgICBMVmFsdWUgbWFzayA9IG1f
b3V0LmNvbnN0SW50UHRyKEdJR0FDQUdFX01BU0spOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IEIzIG1lc3NpbmcgdXAgdGhlIGJpdEFu
ZC4gQWxzbywgd2Ugd2FudCB0byBnZXQgQjMncyBleGNlbGxlbnQKLSAgICAgICAgICAgIC8vIGNv
ZGVnZW4gZm9yIDItb3BlcmFuZCBhbmRxIG9uIHg4Ni02NC4KLSAgICAgICAgICAgIExWYWx1ZSBt
YXNrZWQgPSBtX291dC5iaXRBbmQocHRyLCBtYXNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gQnV0IEIzIHdpbGwgY3VycmVudGx5IG1lc3MgdXAgdGhlIGNvZGUgZ2VuZXJhdGlvbiBv
ZiB0aGlzIGFkZC4gQmFzaWNhbGx5LCBhbnkgb2Zmc2V0IGZyb20gd2hhdCB3ZQotICAgICAgICAg
ICAgLy8gY29tcHV0ZSBoZXJlIHdpbGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVkIHdpdGgg
Z19naWdhY2FnZUJhc2VQdHIuIFRoZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAotICAgICAgICAgICAg
Ly8gbW92ZUNvbnN0YW50cygpIG9ic2VydmVzIHRoYXQgaXQgbmVlZHMgdG8gcmVhc3NvY2lhdGUg
aW4gb3JkZXIgdG8gaG9pc3QgdGhlIGJpZyBjb25zdGFudHMuIEJ1dAotICAgICAgICAgICAgLy8g
aXQncyBtdWNoIGVhc2llciB0byBqdXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBoZXJlLiBUaGF0J3Mg
d2hhdCB3ZSBkbyBmb3Igbm93LgotICAgICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChwb2ludGVyVHlwZSgpKTsKLSAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlUHRyKTsKLSAgICAgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3RlcihtYXNrZWQpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsK
KyAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkgeworICAgICAgICAgICAg
aWYgKHZtKCkucHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkuaXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh2bSgpLnByaW1pdGl2
ZUdpZ2FjYWdlRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHRyOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICByZXR1cm4gcHRyOworICAg
ICAgICBMVmFsdWUgYmFzZVB0ciA9IG1fb3V0LmNvbnN0SW50UHRyKEdpZ2FjYWdlOjpiYXNlUHRy
KGtpbmQpKTsKKyAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5jb25zdEludFB0cihHSUdBQ0FH
RV9NQVNLKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJv
dXQgQjMgbWVzc2luZyB1cCB0aGUgYml0QW5kLiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4
Y2VsbGVudAorICAgICAgICAvLyBjb2RlZ2VuIGZvciAyLW9wZXJhbmQgYW5kcSBvbiB4ODYtNjQu
CisgICAgICAgIExWYWx1ZSBtYXNrZWQgPSBtX291dC5iaXRBbmQocHRyLCBtYXNrKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEJ1dCBCMyB3aWxsIGN1cnJlbnRseSBtZXNzIHVwIHRoZSBjb2RlIGdl
bmVyYXRpb24gb2YgdGhpcyBhZGQuIEJhc2ljYWxseSwgYW55IG9mZnNldCBmcm9tIHdoYXQgd2UK
KyAgICAgICAgLy8gY29tcHV0ZSBoZXJlIHdpbGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVk
IHdpdGggR2lnYWNhZ2U6OmJhc2VQdHIuIFRoZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAorICAgICAg
ICAvLyBtb3ZlQ29uc3RhbnRzKCkgb2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0byByZWFzc29jaWF0
ZSBpbiBvcmRlciB0byBob2lzdCB0aGUgYmlnIGNvbnN0YW50cy4gQnV0CisgICAgICAgIC8vIGl0
J3MgbXVjaCBlYXNpZXIgdG8ganVzdCBibG9jayBCMydzIGJhZG5lc3MgaGVyZS4gVGhhdCdzIHdo
YXQgd2UgZG8gZm9yIG5vdy4KKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
bV9vdXQucGF0Y2hwb2ludChwb2ludGVyVHlwZSgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kU29tZVJlZ2lzdGVyKGJhc2VQdHIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21l
UmVnaXN0ZXIobWFza2VkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAg
ICAgICAgICAgW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIocGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
cmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRTd2l0Y2goU3dp
dGNoRGF0YSogZGF0YSwgTFR5cGUgdHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3ImIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOjppbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiByZXN1bHQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlRmxhZywKLSAgICAgICAgW10gewotICAg
ICAgICAgICAgcmVzdWx0ID0gbmV3IEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7
Ci0gICAgICAgIH0pOwotICAgIHJldHVybiAqcmVzdWx0OwotfQotCiBGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQogewog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEZhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAgfkZhc3RNYWxsb2NBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCk7CiAgICAgCiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBvdmVycmlkZTsKICAgICB2b2lkIGZyZWVB
bGlnbmVkTWVtb3J5KHZvaWQqKSBvdmVycmlkZTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDI0ICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogCi0jaW5jbHVkZSA8bXV0ZXg+Ci0j
aW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCi1HaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3ImIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5z
dGFuY2UoKQotewotICAgIHN0YXRpYyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIHJl
c3VsdDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RkOjpjYWxs
X29uY2UoCi0gICAgICAgIG9uY2VGbGFnLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBuZXcgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7Ci0gICAgICAgIH0pOwot
ICAgIHJldHVybiAqcmVzdWx0OwotfQotCi1HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCitHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3I6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCBr
aW5kKQorICAgIDogbV9raW5kKGtpbmQpCiB7CiB9CiAKQEAgLTUzLDE3ICszOSwxNyBAQCBHaWdh
Y2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5HaWdhY2FnCiAKIHZvaWQqIEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1h
bGxvYyhhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1h
bGxvYyhtX2tpbmQsIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQogewotICAg
IEdpZ2FjYWdlOjphbGlnbmVkRnJlZShiYXNlUHRyKTsKKyAgICBHaWdhY2FnZTo6YWxpZ25lZEZy
ZWUobV9raW5kLCBiYXNlUHRyKTsKIH0KIAogdm9pZCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIkdp
Z2FjYWdlIik7CisgICAgb3V0LnByaW50KEdpZ2FjYWdlOjpuYW1lKG1fa2luZCksICJHaWdhY2Fn
ZSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDEz
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIK
KyNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdp
Z2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBzaW5nbGV0
b24uIFRoZXJlIHNob3VsZCBiZSBkaWZmZXJlbnQgaW5zdGFuY2VzIGZvciBwcmltYXJpZXMsIEpT
VmFsdWVzLAotICAgIC8vIGFuZCBvdGhlciB0aGluZ3MuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkxOQotICAgIHN0YXRpYyBHaWdhY2FnZUFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3ImIGluc3RhbmNlKCk7Ci0KKyAgICBHaWdhY2FnZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoR2lnYWNhZ2U6OktpbmQpOwogICAgIH5HaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKTsKICAgICAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwpAQCAtNDQsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6Ci0gICAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisgICAgR2lnYWNh
Z2U6OktpbmQgbV9raW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTM3NiwxMCArMzc2LDEwIEBA
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1h
Y3JvIGxvYWRDYWdlZChzb3VyY2UsIGRlc3QsIHNjcmF0Y2gpCittYWNybyBsb2FkQ2FnZWQoYmFz
ZVB0ciwgc291cmNlLCBkZXN0LCBzY3JhdGNoKQogICAgIGxvYWRwIHNvdXJjZSwgZGVzdAogICAg
IGlmIEdJR0FDQUdFX0VOQUJMRUQgYW5kIG5vdCBDX0xPT1AKLSAgICAgICAgbG9hZHAgX2dfZ2ln
YWNhZ2VCYXNlUHRyLCBzY3JhdGNoCisgICAgICAgIGxvYWRwIGJhc2VQdHIsIHNjcmF0Y2gKICAg
ICAgICAgYnRweiBzY3JhdGNoLCAuZG9uZQogICAgICAgICBhbmRwIGNvbnN0ZXhwciBHSUdBQ0FH
RV9NQVNLLCBkZXN0CiAgICAgICAgIGFkZHAgc2NyYXRjaCwgZGVzdApAQCAtMTIwOSw3ICsxMjA5
LDcgQEAgX2xsaW50X29wX2lzX29iamVjdDoKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAg
ICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxp
bmUKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2Vd
LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2Fj
YWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmpl
Y3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBz
eGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5y
ZWFkeQpAQCAtMTIyMiw3ICsxMjIyLDcgQEAgZW5kCiAKIG1hY3JvIHN0b3JlUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVl
LCBzY3JhdGNoKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQsIC5pc0lubGluZQotICAgIGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2Jq
ZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UsIHNjcmF0Y2gpCisgICAgbG9hZENhZ2Vk
KF9nX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RB
bmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgc2NyYXRjaCkKICAgICBuZWdpIHByb3BlcnR5
T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNl
dEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTI5OCw3ICsxMjk4LDcgQEAgX2xsaW50X29wX2dl
dF9hcnJheV9sZW5ndGg6CiAgICAgYnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhT
bG93CiAgICAgYnRpeiB0MiwgSW5kZXhpbmdTaGFwZU1hc2ssIC5vcEdldEFycmF5TGVuZ3RoU2xv
dwogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBsb2FkQ2FnZWQoSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQyKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2ln
YWNhZ2VCYXNlUHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCiAgICAgbG9h
ZGkgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoW3QwXSwgdDAKICAgICBiaWx0IHQwLCAwLCAub3BHZXRBcnJheUxlbmd0aFNsb3cK
ICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDAKQEAgLTE0ODEsNyArMTQ4MSw3IEBAIF9sbGludF9v
cF9nZXRfYnlfdmFsOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MykKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hp
MnEgdDEsIHQxCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzLCB0
NSkKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QwXSwgdDMsIHQ1KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAg
ICAgYmllcSB0MiwgSW50MzJTaGFwZSwgLm9wR2V0QnlWYWxJc0NvbnRpZ3VvdXMKICAgICBiaW5l
cSB0MiwgQ29udGlndW91c1NoYXBlLCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKQEAgLTE1Mjgs
NyArMTUyOCw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGJpYSB0MiwgTGFzdEFycmF5
VHlwZSAtIEZpcnN0QXJyYXlUeXBlLCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAjIFN3ZWV0
LCBub3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29tZSBiYXNpYyB0
aGluZ3Mgbm93LgotICAgIGxvYWRDYWdlZChKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBd
LCB0MywgdDUpCisgICAgbG9hZENhZ2VkKF9nX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0ciwgSlNB
cnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3QwXSwgdDMsIHQ1KQogICAgIGJpYWVxIHQxLCBKU0Fy
cmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAj
IE5vdyBiaXNlY3QgdGhyb3VnaCB0aGUgdmFyaW91cyB0eXBlcy4gTm90ZSB0aGF0IHdlIGNhbiB0
cmVhdCBVaW50OEFycmF5VHlwZSBhbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0
aW1hCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0m
IHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
Ci0gICAgdm9pZCogYmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOworICAg
IHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0ZShzaXplKTsKICAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAsNyBAQCBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShzaXpl
KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUo
c2l6ZSk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7
CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFk
SW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXpl
X3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9IHZtLmF1eGlsaWFy
eVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1Zh
bHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKICAgICBpZiAoIW5ld0Jhc2Up
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNo
b3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVu
KEpTQ2UKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiAKICAgICBp
ZiAodGhpc09iamVjdC0+bV9tYXBwZWRBcmd1bWVudHMpCi0gICAgICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7CisgICAgICAgIHZp
c2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKS5n
ZXQoKSk7CiAgICAgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxk
cmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgRGly
ZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3Qo
KS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIERvbnRFbnVtKTsKICAgICAKLSAgICB2b2lk
KiBiYWNraW5nU3RvcmUgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1
bWVudHNTaXplKCkpOworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLnByaW1pdGl2ZUdpZ2Fj
YWdlU3BhY2UudHJ5QWxsb2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKICAgICBSRUxFQVNF
X0FTU0VSVChiYWNraW5nU3RvcmUpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0
PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwgdGhp
cywgb3ZlcnJpZGVzKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6
b3ZlcnJpZGVUaGluZ3NJZk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChW
TSYgdm0sIHVuc2lnbmVkIGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnko
dm0pOwotICAgIG1fbWFwcGVkQXJndW1lbnRzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgbV9t
YXBwZWRBcmd1bWVudHMuZ2V0KCkuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHNPZmZzZXQu
aCIKICNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2VkUHRy
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9sZW5n
dGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5k
IG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgdWlu
dDMyX3QgbV9taW5DYXBhY2l0eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJt
aW5lcyB0aGUgY2FwYWNpdHkgb2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNh
cGFjaXR5LCBvciBtYXliZSBzb21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdh
eSB0byBiZSBraW5kIHRvIHRoZSBKSVRzLgotICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+IG1f
bWFwcGVkQXJndW1lbnRzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNh
bGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCisgICAg
QXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxQcmltaXRpdmUsIGJvb2wqPj4gbV9tYXBwZWRBcmd1
bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQg
Y2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYv
Q2FnZWRQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYwLDcgKzYxLDcgQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJvb2wqPiBtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcjsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJvb2wqPj4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OnZpc2l0Q2hpbGRyCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcikKLSAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpKTsKKyAgICAgICAgdmlzaXRvci5tYXJrQXV4
aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpLmdl
dCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTI2MSw3ICsyNjEsNyBAQCB2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChhcmdzTGVuZ3Ro
KSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7CisgICAgICAg
IHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2Nh
dGUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYmFja2luZ1N0b3JlKTsKICAgICAgICAgYm9vbCogbW9kaWZpZWRBcmd1bWVu
dHMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICAgICAgbV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3VtZW50cyk7CkBA
IC0yODIsNyArMjgyLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpzZXRNb2RpZmll
ZAogewogICAgIGluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2FyeSh2bSwg
bGVuZ3RoKTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIG1fbW9kaWZpZWRBcmd1
bWVudHNEZXNjcmlwdG9yLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgICAgIG1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLmdldCgpLmdldCgpW2luZGV4XSA9IHRydWU7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTEsNyArMjkxLDcgQEAgYm9vbCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojppc01vZGlmaWVkQQogICAgIGlmICghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXQoKVtpbmRleF07
CisgICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXQoKS5nZXQo
KVtpbmRleF07CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtMTg4LDcgKzE4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2
b2lkKiBkYXRhID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUp
OworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2Nh
dGUoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTY1NSw3ICs2NTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CiAgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRU
eXBlPiBtX3RhaWw7Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZSo+IG1f
YnVmZmVyOworICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8R2lnYWNhZ2U6OkpTVmFsdWUs
IEhhc2hNYXBCdWZmZXJUeXBlKj4+IG1fYnVmZmVyOwogICAgIHVpbnQzMl90IG1fa2V5Q291bnQ7
CiAgICAgdWludDMyX3QgbV9kZWxldGVDb3VudDsKICAgICB1aW50MzJfdCBtX2NhcGFjaXR5OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBl
KSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFs
Q29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250
ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAg
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0
aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1w
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArOTgs
NyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNl
IHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0
aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRl
bXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRl
cmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZt
LmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRl
bXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTM2MCw3ICszNjAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0
CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAg
ICAgICAgbmV3QWxsb2NCYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6
ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFs
bG9jYXRlKG5ld1NpemUpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFj
aXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rv
ckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0g
dm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3Bh
Y2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwog
ICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyAr
NjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAg
IHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVu
dFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLmF1eGls
aWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9
IHZtLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgc2l6ZSk7CiAg
ICAgICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2
aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1
aXJlTG9jaygpCiAgICAgLy8gTm90ZTogZXZlcnl0aGluZyBiZWxvdyBtdXN0IGNvbWUgYWZ0ZXIg
YWRkQ3VycmVudFRocmVhZCgpLgogICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3JhYkFsbExvY2tz
KCk7CiAgICAgCi0gICAgbV92bS0+ZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7Cisg
ICAgbV92bS0+ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7CiAKICNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNh
bXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNDYsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgcHJlcGFyZVRv
UHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVkOgotICAgIEF1
eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8QnV0dGVyZmx5Pj4gbV9idXR0ZXJmbHk7CisgICAgQXV4
aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwgQnV0dGVyZmx5Pj4gbV9i
dXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3Qg
bV9wYWRkaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVj
dCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmln
aW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVtcCA9IHZtLmF1eGls
aWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVH
aWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NSwxNSArMTY1LDE5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fcnVuTG9vcChDRlJ1bkxvb3BHZXRDdXJyZW50KCkpCiAjZW5kaWYgLy8g
VVNFKENGKQogICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkKLSAgICAsIGF1eGlsaWFyeVNwYWNl
KCJBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1
Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCAmR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjppbnN0YW5jZSgpKQotICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCAm
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBkZXN0
cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCAmRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBzdHJpbmdTcGFjZSgi
SlNTdHJpbmciLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3Rh
bmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVjdGlibGVPYmpl
Y3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkp
Ci0gICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2Vw
dCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2Uo
IkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3Io
c3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKKyAg
ICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNhZ2VB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKKyAgICAsIGpzVmFs
dWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQorICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VT
cGFjZSgiUHJpbWl0aXZlR2lnYWNhZ2UiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNO
b3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBwcmltaXRpdmVHaWdhY2Fn
ZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFsdWVHaWdhY2FnZVNwYWNlKCJKU1ZhbHVlR2ln
YWNhZ2UiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisg
ICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05v
dE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3Iu
Z2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwi
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc3RyaW5nU3BhY2UoIkpT
U3RyaW5nIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0
aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFj
ZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2Nr
U3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsICZGYXN0TWFsbG9jQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIHdlYkFzc2VtYmx5Q29kZUJs
b2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGll
bnREYXRhKDApCkBAIC0yMTEsNyArMjE1LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgICwgbV9jb2RlQ2FjaGUoc3RkOjptYWtlX3VuaXF1ZTxDb2RlQ2Fj
aGU+KCkpCiAgICAgLCBtX2J1aWx0aW5FeGVjdXRhYmxlcyhzdGQ6Om1ha2VfdW5pcXVlPEJ1aWx0
aW5FeGVjdXRhYmxlcz4oKnRoaXMpKQogICAgICwgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQo
MCkKLSAgICAsIG1fZ2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKKyAgICAsIG1fcHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKICAgICAsIG1fY29udHJvbEZsb3dQcm9maWxlckVu
YWJsZWRDb3VudCgwKQogICAgICwgbV9zaGFkb3dDaGlja2VuKHN0ZDo6bWFrZV91bmlxdWU8U2hh
ZG93Q2hpY2tlbj4oKSkKIHsKQEAgLTQyMywyMSArNDI3LDIxIEBAIFZNOjp+Vk0oKQogI2VuZGlm
CiB9CiAKLXZvaWQgVk06OmdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBhcmd1bWVudCkK
K3ZvaWQgVk06OnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBhcmd1bWVu
dCkKIHsKLSAgICBzdGF0aWNfY2FzdDxWTSo+KGFyZ3VtZW50KS0+Z2lnYWNhZ2VEaXNhYmxlZCgp
OworICAgIHN0YXRpY19jYXN0PFZNKj4oYXJndW1lbnQpLT5wcmltaXRpdmVHaWdhY2FnZURpc2Fi
bGVkKCk7CiB9CiAKLXZvaWQgVk06OmdpZ2FjYWdlRGlzYWJsZWQoKQordm9pZCBWTTo6cHJpbWl0
aXZlR2lnYWNhZ2VEaXNhYmxlZCgpCiB7CiAgICAgaWYgKG1fYXBpTG9jay0+Y3VycmVudFRocmVh
ZElzSG9sZGluZ0xvY2soKSkgewotICAgICAgICBtX2dpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0
aGlzLCAiR2lnYWNhZ2UgZGlzYWJsZWQiKTsKKyAgICAgICAgbV9wcmltaXRpdmVHaWdhY2FnZUVu
YWJsZWQuZmlyZUFsbCgqdGhpcywgIlByaW1pdGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogIAogICAgIC8vIFRoaXMgaXMgdG90YWxseSByYWN5LCBhbmQg
dGhhdCdzIE9LLiBUaGUgcG9pbnQgaXMsIGl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRo
YXQgdGhleSBwYXNzIHRoZQogICAgIC8vIHVuY2FnZWQgYnVmZmVyIGluIGEgbmljZWx5IHN5bmNo
cm9uaXplZCBtYW5uZXIuCi0gICAgbV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkID0gdHJ1ZTsK
KyAgICBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVlOwogfQogCiB2
b2lkIFZNOjpzZXRMYXN0U3RhY2tUb3Aodm9pZCogbGFzdFN0YWNrVG9wKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw4IEBAIGNs
YXNzIERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEV4
Y2VwdGlvbjsKIGNsYXNzIEV4Y2VwdGlvblNjb3BlOworY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBj
bGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9maWxl
ckxvZzsKQEAgLTI4NSw3ICsyODcsMTIgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBIZWFwIGhl
YXA7CiAgICAgCi0gICAgU3Vic3BhY2UgYXV4aWxpYXJ5U3BhY2U7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2Zhc3RNYWxsb2NBbGxvY2F0
b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4g
bV9wcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2pzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcjsKKyAg
ICAKKyAgICBTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZVNwYWNlOyAvLyBUeXBlZCBhcnJheXMs
IHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgorICAgIFN1YnNwYWNlIGpzVmFsdWVH
aWdhY2FnZVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVzLCBldGMgZ28g
aGVyZS4KICAgICAKICAgICAvLyBXaGVuZXZlciBwb3NzaWJsZSwgdXNlIHN1YnNwYWNlRm9yPENl
bGxUeXBlPih2bSkgdG8gZ2V0IG9uZSBvZiB0aGVzZSBzdWJzcGFjZXMuCiAgICAgU3Vic3BhY2Ug
Y2VsbFNwYWNlOwpAQCAtNTI0LDExICs1MzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQqIGxhc3RT
dGFja1RvcCgpIHsgcmV0dXJuIG1fbGFzdFN0YWNrVG9wOyB9CiAgICAgdm9pZCBzZXRMYXN0U3Rh
Y2tUb3Aodm9pZCopOwogICAgIAotICAgIHZvaWQgZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNz
YXJ5KCkKKyAgICB2b2lkIGZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgp
CiAgICAgewotICAgICAgICBpZiAobV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkKSB7Ci0gICAg
ICAgICAgICBtX25lZWRUb0ZpcmVHaWdhY2FnZUVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IG1fZ2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJHaWdhY2FnZSBkaXNhYmxlZCBhc3lu
Y2hyb25vdXNseSIpOworICAgICAgICBpZiAobV9uZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VF
bmFibGVkKSB7CisgICAgICAgICAgICBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJs
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkLmZpcmVB
bGwoKnRoaXMsICJQcmltaXRpdmUgZ2lnYWNhZ2UgZGlzYWJsZWQgYXN5bmNocm9ub3VzbHkiKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNjMzLDcgKzY0MCw3IEBAIHB1YmxpYzoKICAgICAvLyBG
SVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVy
LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3Ry
aW5nJik7CiAgICAgCi0gICAgSW5saW5lV2F0Y2hwb2ludFNldCYgZ2lnYWNhZ2VFbmFibGVkKCkg
eyByZXR1cm4gbV9naWdhY2FnZUVuYWJsZWQ7IH0KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBw
cmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5h
YmxlZDsgfQogCiAgICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7
IHJldHVybiBtX2J1aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCkBAIC03ODcsOCArNzk0LDgg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyPiBtX3R5cGVQcm9m
aWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyTG9nPiBtX3R5cGVQcm9maWxl
ckxvZzsKICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudDsKLSAgICBib29s
IG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgSW5saW5lV2F0Y2hw
b2ludFNldCBtX2dpZ2FjYWdlRW5hYmxlZDsKKyAgICBib29sIG1fbmVlZFRvRmlyZVByaW1pdGl2
ZUdpZ2FjYWdlRW5hYmxlZCB7IGZhbHNlIH07CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3By
aW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9m
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93
UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9maWxlcjsKICAgICB1bnNpZ25lZCBtX2NvbnRyb2xG
bG93UHJvZmlsZXJFbmFibGVkQ291bnQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHJldmlzaW9uIDIyMDMy
MykKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1w
bGF0ZTxHaWdhY2FnZTo6S2luZCBraW5kLCB0eXBlbmFtZSBUPgogY2xhc3MgQ2FnZWRQdHIgewog
cHVibGljOgogICAgIENhZ2VkUHRyKFQqIHB0ciA9IG51bGxwdHIpCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBUKiBnZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcHRy
KTsKLSAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpjYWdlZChtX3B0cik7CisgICAgICAgIHJldHVy
biBHaWdhY2FnZTo6Y2FnZWQoa2luZCwgbV9wdHIpOwogICAgIH0KICAgICAKICAgICBUKiBnZXRN
YXlCZU51bGwoKSBjb25zdApJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAkocmV2aXNpb24gMjIwMzIzKQor
KysgU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIGNvbnN0IHZvaWQqIGdfZ2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3BhY2UgR2lnYWNh
Z2UgewogCi12b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCit2b2lkKiB0cnlNYWxsb2MoS2lu
ZCwgc2l6ZV90IHNpemUpCiB7CiAgICAgYXV0byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jKHNpemUp
OwogICAgIHZvaWQqIHJlYWxSZXN1bHQ7CkBAIC00NywxMiArNDcsMTIgQEAgdm9pZCogdHJ5TWFs
bG9jKHNpemVfdCBzaXplKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkKiB0cnlBbGxv
Y2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBh
Z2VzKEtpbmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBPU0FsbG9jYXRvcjo6cmVzZXJ2
ZVVuY29tbWl0dGVkKHNpemUpOwogfQogCi12b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFz
ZVB0ciwgc2l6ZV90IHNpemUpCit2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFz
ZVB0ciwgc2l6ZV90IHNpemUpCiB7CiAgICAgT1NBbGxvY2F0b3I6OnJlbGVhc2VEZWNvbW1pdHRl
ZChiYXNlUHRyLCBzaXplKTsKIH0KQEAgLTY3LDQyICs2Nyw1MSBAQCBuYW1lc3BhY2UgR2lnYWNh
Z2UgewogLy8gYW5kIHN0YXkgc2NyYW1ibGVkIGV4Y2VwdCBqdXN0IGJlZm9yZSB1c2UuCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MDM1CiAKLXZvaWQqIHRy
eUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit2b2lkKiB0cnlB
bGlnbmVkTWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7
Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0g
Ym1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGJtYWxsb2M6OmhlYXBL
aW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIGFsaWduZWRGcmVlKHZvaWQqIHApCit2b2lkIGFsaWduZWRGcmVlKEtpbmQg
a2luZCwgdm9pZCogcCkKIHsKLSAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6SGVh
cEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKyAgICBSRUxF
QVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIHApKTsKKyAgICBibWFsbG9jOjphcGk6OmZyZWUocCwg
Ym1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogfQog
Ci12b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCit2b2lkKiB0cnlNYWxsb2MoS2luZCBraW5k
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeU1h
bGxvYyhzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3Vs
dCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQp
KTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIGZyZWUodm9pZCogcCkKK3ZvaWQgZnJlZShLaW5kIGtpbmQsIHZvaWQqIHApCiB7Ci0gICAg
Ym1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAg
aWYgKCFwKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWdlZChraW5k
LCBwKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQp
KTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAotdm9pZCogdHJ5QWxsb2NhdGVWaXJ0
dWFsUGFnZXMoc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5k
IGtpbmQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6
dHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6ZSgpLCBzaXplLCBibWFsbG9jOjpI
ZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5
TGFyZ2VNZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6ZSgpLCBzaXplLCBibWFsbG9jOjpoZWFw
S2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCkKK3Zv
aWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCkKIHsK
LSAgICBibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1YWwoYmFzZVB0ciwgYm1hbGxvYzo6SGVh
cEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKyAgICBSRUxF
QVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIGJhc2VQdHIpKTsKKyAgICBibWFsbG9jOjphcGk6OmZy
ZWVMYXJnZVZpcnR1YWwoYmFzZVB0ciwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdU
Rjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDMy
MykKKysrIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1
ICszNyw0NyBAQCBleHRlcm4gV1RGX0VYUE9SVERBVEEgY29uc3Qgdm9pZCogZ19naWdhCiAKIG5h
bWVzcGFjZSBHaWdhY2FnZSB7CiAKK2VudW0gS2luZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpT
VmFsdWUKK307CisKIGlubGluZSB2b2lkIGVuc3VyZUdpZ2FjYWdlKCkgeyB9Ci1pbmxpbmUgdm9p
ZCBkaXNhYmxlR2lnYWNhZ2UoKSB7IH0KK2lubGluZSB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdh
Y2FnZSgpIHsgfQogaW5saW5lIGJvb2wgc2hvdWxkQmVFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7
IH0KIAotaW5saW5lIHZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9p
ZCopIHsgfQotaW5saW5lIHZvaWQgcmVtb3ZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQq
KSwgdm9pZCopIHsgfQoraW5saW5lIHZvaWQgYWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZv
aWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQoraW5saW5lIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQorCitBTFdBWVNfSU5MSU5F
IGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CisgICAgY2FzZSBK
U1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFsdWUiOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQqJiBiYXNlUHRyKEtpbmQpCit7CisgICAgcmV0dXJuIGdfZ2lnYWNhZ2VCYXNlUHRy
OworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNhZ2VkKFQqIHB0cikgeyBy
ZXR1cm4gcHRyOyB9CitpbmxpbmUgVCogY2FnZWQoS2luZCwgVCogcHRyKSB7IHJldHVybiBwdHI7
IH0KIAotaW5saW5lIGJvb2wgaXNDYWdlZChjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0K
K2lubGluZSBib29sIGlzQ2FnZWQoS2luZCwgY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLWlubGluZSB2b2lkKiB0cnlBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKSB7IHJldHVybiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUpOyB9
Ci1pbmxpbmUgdm9pZCBhbGlnbmVkRnJlZSh2b2lkKiBwKSB7IGZhc3RBbGlnbmVkRnJlZShwKTsg
fQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSk7Ci1pbmxp
bmUgdm9pZCBmcmVlKHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KK2lubGluZSB2b2lkKiB0cnlB
bGlnbmVkTWFsbG9jKEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7IHJldHVy
biB0cnlGYXN0QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUpOyB9CitpbmxpbmUgdm9pZCBh
bGlnbmVkRnJlZShLaW5kLCB2b2lkKiBwKSB7IGZhc3RBbGlnbmVkRnJlZShwKTsgfQorV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qgc2l6ZSk7CitpbmxpbmUg
dm9pZCBmcmVlKEtpbmQsIHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KIAotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKHNpemVfdCBzaXplKTsKLVdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90
IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2Vz
KEtpbmQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFs
UGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOwogCiB9IC8vIG5hbWVzcGFj
ZSBHaWdhY2FnZQogI2Vsc2UKQEAgLTYzLDEzICs4NSwxMyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmcmVlVmlydHVhbFBhZ2VzCiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkKiB0cnlBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFsaWduZWRGcmVlKHZvaWQqKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGZyZWUodm9pZCopOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsaWdu
ZWRNYWxsb2MoS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUoS2luZCwgdm9pZCopOworV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZnJlZShLaW5kLCB2b2lkKik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxv
Y2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
cmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRf
UFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJh
c2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50
RGF0YS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYg
dm0pCiAgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnModm0pCiAgICAgLCBtX2J1aWx0aW5OYW1lcygm
dm0pCi0gICAgLCBtX291dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91
dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjppbnN0YW5jZSgpKQotICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Bh
Y2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAs
ICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIG1f
b3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFp
bnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgbV9nbG9i
YWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBP
dXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQAogCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY1MjE4QkE4OEEwMDA3
NkZBM0YgLyogQXN5bmNUYXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDY4MTg5RUVE
RTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ5REI0
NTE3RjI0NDcxMDBFQUFCNzkgLyogRml4ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyog
SW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8q
IEJJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBCSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAy
IC8qIE11dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDREQ0VENjE3QTY0OUQ5MDA5M0IyRjIgLyogTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQjE4RjQ4RDc1MDA5NTA3MDIg
LyogUGVyUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0NDZBMDcxN0E2MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQzE4RjQ4RDc1
MDA5NTA3MDIgLyogUGVyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDQ0NjlGRDE3QTYxRjFGMDBGOUVBMUQgLyogUGVyVGhyZWFkLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk0LDcgKzk0
LDcgQEAKIAkJMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVt
cFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEZBMDA0MTlDRTRCNjgw
MEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTGluZU1ldGFkYXRhLmg7IHBhdGggPSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0
VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBl
LmNwcDsgcGF0aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjgg
LyogQklubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCSW5saW5lLmg7
IHBhdGggPSBibWFsbG9jL0JJbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0b3IuaDsgcGF0
aCA9IGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCQXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3NlcnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5
c2NhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRo
ID0gYm1hbGxvYy9TeXNjYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcs
MTAgKzI4NywxMCBAQAogCQkJCTY1OTlDNUNCMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVN
ZW1vcnkuaCAqLywKIAkJCQkxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICov
LAogCQkJCTBGNUJGMTcyMUYyM0M1NzEwMDI5RDkxRCAvKiBCRXhwb3J0LmggKi8sCisJCQkJMTQx
M0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLywKIAkJCQkxNEM5MTlDODE4RkND
NTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggKi8sCiAJCQkJMTREOURCNDUxN0YyNDQ3MTAwRUFB
Qjc5IC8qIEZpeGVkVmVjdG9yLmggKi8sCiAJCQkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8q
IEhlYXBLaW5kLmggKi8sCi0JCQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5o
ICovLAogCQkJCTE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8sCiAJCQkJNDQy
NkUyN0UxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTQ0MjZFMjdGMUM4
MzhFRTAwMDhFQjA0MiAvKiBMb2dnaW5nLmggKi8sCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkx
NERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVCRjE0OTFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDRDMDdGNTFDN0I3MDI2MDA1MUJCNkEgLyogTGFyZ2VNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Qzg5OTJEMUNDNTc4MzMwMDI3QTA1NyAvKiBMYXJnZVJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBc3luY1Rhc2tfaAogCiAjaW5jbHVk
ZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIK
ICNpbmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSA8YXRvbWlj
PgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHJldmlzaW9uIDIyMDMyMykJKGZyb20g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaDoyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5saW5l
X2gKKyNkZWZpbmUgSW5saW5lX2gKKworI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3
YXlzX2lubGluZSkpIGlubGluZQorCisjZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChu
b2lubGluZSkpCisKKyNlbmRpZiAvLyBJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9CSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5s
aW5lLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSW5saW5lX2gKLSNkZWZpbmUgSW5saW5lX2gKKyNpZm5kZWYgQklubGlu
ZV9oCisjZGVmaW5lIEJJbmxpbmVfaAogCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChh
bHdheXNfaW5saW5lKSkgaW5saW5lCisjZGVmaW5lIEJJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3
YXlzX2lubGluZSkpIGlubGluZQogCi0jZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChu
b2lubGluZSkpCisjZGVmaW5lIEJOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQog
Ci0jZW5kaWYgLy8gSW5saW5lX2gKKyNlbmRpZiAvLyBCSW5saW5lX2gKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJQZXJQcm9j
ZXNzLmgiCiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
RGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDExIEBACiAg
Ki8KIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVk
ZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJEZWFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRlYnVnSGVh
cC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJP
YmplY3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw4IEBACiAKIC8vIEZJWE1FOiBBc2sgZHlsZCB0byBwdXQgdGhpcyBpbiBpdHMgb3du
IHBhZ2UsIGFuZCBtcHJvdGVjdCB0aGUgcGFnZSBhZnRlciB3ZSBlbnN1cmUgdGhlIGdpZ2FjYWdl
LgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDk3Mgotdm9p
ZCogZ19naWdhY2FnZUJhc2VQdHI7Cit2b2lkKiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsK
K3ZvaWQqIGdfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0cjsKIAogdXNpbmcgbmFtZXNwYWNlIGJtYWxs
b2M7CiAKQEAgLTUzLDggKzU0LDggQEAgc3RydWN0IENhbGxiYWNrIHsKICAgICB2b2lkKiBhcmd1
bWVudCB7IG51bGxwdHIgfTsKIH07CiAKLXN0cnVjdCBDYWxsYmFja3MgewotICAgIENhbGxiYWNr
cyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyB9CitzdHJ1Y3QgUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrcyB7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JikgeyB9CiAgICAgCiAgICAgVmVjdG9yPENhbGxiYWNrPiBjYWxs
YmFja3M7CiB9OwpAQCAtNjksMzUgKzcwLDQwIEBAIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKQogICAg
ICAgICAgICAgaWYgKCFzaG91bGRCZUVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQqIGJhc2VQdHIgPSB0cnlWTUFsbG9jYXRl
KEdJR0FDQUdFX1NJWkUsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAg
ICAgICAgaWYgKCFiYXNlUHRyKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcyhiYXNlUHRyLCBHSUdBQ0FH
RV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZ19n
aWdhY2FnZUJhc2VQdHIgPSBiYXNlUHRyOworICAgICAgICAgICAgZm9yRWFjaEtpbmQoCisgICAg
ICAgICAgICAgICAgWyZdIChLaW5kIGtpbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFJhbmRvbWl6ZSB3aGVyZSB0aGlzIGdvZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNDUKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZVB0cihraW5kKSA9IHRyeVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwgR0lH
QUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldBWSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
YmFzZVB0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGQVRB
TDogQ291bGQgbm90IGFsbG9jYXRlICVzIGdpZ2FjYWdlLlxuIiwgbmFtZShraW5kKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBCQ1JBU0goKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2lj
YWxQYWdlcyhiYXNlUHRyKGtpbmQpLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAjZW5kaWYgLy8gR0lHQUNBR0VfRU5B
QkxFRAogfQogCi12b2lkIGRpc2FibGVHaWdhY2FnZSgpCit2b2lkIGRpc2FibGVQcmltaXRpdmVH
aWdhY2FnZSgpCiB7CiAgICAgZW5zdXJlR2lnYWNhZ2UoKTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VC
YXNlUHRyKSB7CisgICAgaWYgKCFnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cikgewogICAgICAg
ICAvLyBJdCB3YXMgbmV2ZXIgZW5hYmxlZC4gVGhhdCBtZWFucyB0aGF0IHdlIG5ldmVyIGV2ZW4g
c2F2ZWQgYW55IGNhbGxiYWNrcy4gT3IsIHdlIGhhZCBhbHJlYWR5IGRpc2FibGVkCiAgICAgICAg
IC8vIGl0IGJlZm9yZSwgYW5kIGFscmVhZHkgY2FsbGVkIHRoZSBjYWxsYmFja3MuCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJv
Y2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2so
UGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9y
IChDYWxsYmFjayYgY2FsbGJhY2sgOiBjYWxsYmFja3MuY2FsbGJhY2tzKQogICAgICAgICBjYWxs
YmFjay5mdW5jdGlvbihjYWxsYmFjay5hcmd1bWVudCk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNr
cy5zaHJpbmsoMCk7CiAgICAgZ19naWdhY2FnZUJhc2VQdHIgPSBudWxscHRyOwogfQogCi12b2lk
IGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1l
bnQpCit2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZv
aWQqKSwgdm9pZCogYXJndW1lbnQpCiB7CiAgICAgZW5zdXJlR2lnYWNhZ2UoKTsKICAgICBpZiAo
IWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CkBAIC0xMDYsMTUgKzExMiwxNSBAQCB2b2lkIGFkZERpc2Fi
bGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQo
KTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2Fs
bGJhY2tzPjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJh
Y2tzID0gKlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNo
KENhbGxiYWNrKGZ1bmN0aW9uLCBhcmd1bWVudCkpOwogfQogCi12b2lkIHJlbW92ZURpc2FibGVD
YWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCit2b2lkIHJl
bW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9p
ZCogYXJndW1lbnQpCiB7Ci0gICAgQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxD
YWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2Nr
KFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
cz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJv
Y2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWxsYmFja3MuY2FsbGJhY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmIChjYWxsYmFja3MuY2FsbGJhY2tzW2ldLmZ1bmN0aW9uID09IGZ1bmN0aW9uCiAgICAgICAg
ICAgICAmJiBjYWxsYmFja3MuY2FsbGJhY2tzW2ldLmFyZ3VtZW50ID09IGFyZ3VtZW50KSB7Cklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKICNpbmNsdWRlICJCRXhwb3J0LmgiCisjaW5j
bHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgogI2luY2x1ZGUgPGludHR5
cGVzLmg+CiAKQEAgLTQ0LDIzICs0NSw2MCBAQAogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDAK
ICNlbmRpZgogCi1leHRlcm4gIkMiIEJFWFBPUlQgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7Citl
eHRlcm4gIkMiIEJFWFBPUlQgdm9pZCogZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CitleHRl
cm4gIkMiIEJFWFBPUlQgdm9pZCogZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3Bh
Y2UgR2lnYWNhZ2UgewogCitlbnVtIEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVl
Cit9OworCiBCRVhQT1JUIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKTsKIAotQkVYUE9SVCB2b2lkIGRp
c2FibGVHaWdhY2FnZSgpOworQkVYUE9SVCB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgp
OworCisvLyBUaGlzIHdpbGwgY2FsbCB0aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1lZGlhdGVseSBp
ZiB0aGUgUHJpbWl0aXZlIEdpZ2FjYWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KK0JFWFBPUlQg
dm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7
CitCRVhQT1JUIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZv
aWQqKSwgdm9pZCopOworCitJTkxJTkUgY29uc3QgY2hhciogbmFtZShLaW5kIGtpbmQpCit7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAgICAgIHJldHVybiAi
UHJpbWl0aXZlIjsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7
CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitJTkxJTkUg
dm9pZComIGJhc2VQdHIoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7
CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICByZXR1cm4gZ19qc1ZhbHVlR2lnYWNhZ2VCYXNl
UHRyOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1cm4gZ19wcmltaXRpdmVHaWdhY2Fn
ZUJhc2VQdHI7Cit9CiAKLS8vIFRoaXMgd2lsbCBjYWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGlt
bWVkaWF0ZWx5IGlmIHRoZSBHaWdhY2FnZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuCi1CRVhQT1JU
IHZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwotQkVYUE9S
VCB2b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGZvckVhY2hLaW5kKGNvbnN0IEZ1bmMmIGZ1bmMp
Cit7CisgICAgZnVuYyhQcmltaXRpdmUpOworICAgIGZ1bmMoSlNWYWx1ZSk7Cit9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1UKiBjYWdlZChUKiBwdHIpCitJTkxJTkUgVCogY2FnZWQoS2luZCBr
aW5kLCBUKiBwdHIpCiB7CiAgICAgQkFTU0VSVChwdHIpOwotICAgIHZvaWQqIGdpZ2FjYWdlQmFz
ZVB0ciA9IGdfZ2lnYWNhZ2VCYXNlUHRyOworICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGJh
c2VQdHIoa2luZCk7CiAgICAgaWYgKCFnaWdhY2FnZUJhc2VQdHIpCiAgICAgICAgIHJldHVybiBw
dHI7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KApAQCAtNjgsOSArMTA2LDkgQEAg
VCogY2FnZWQoVCogcHRyKQogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHB0cikgJiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEdJR0FDQUdFX01BU0spKSk7CiB9CiAKLWlu
bGluZSBib29sIGlzQ2FnZWQoY29uc3Qgdm9pZCogcHRyKQorSU5MSU5FIGJvb2wgaXNDYWdlZChL
aW5kIGtpbmQsIGNvbnN0IHZvaWQqIHB0cikKIHsKLSAgICByZXR1cm4gY2FnZWQocHRyKSA9PSBw
dHI7CisgICAgcmV0dXJuIGNhZ2VkKGtpbmQsIHB0cikgPT0gcHRyOwogfQogCiBCRVhQT1JUIGJv
b2wgc2hvdWxkQmVFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlz
aW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6Omxv
Y2tfZ3VhcgogCiBib29sIEhlYXA6OnVzaW5nR2lnYWNhZ2UoKQogewotICAgIHJldHVybiBtX2tp
bmQgPT0gSGVhcEtpbmQ6OkdpZ2FjYWdlICYmIGdfZ2lnYWNhZ2VCYXNlUHRyOworICAgIHJldHVy
biBpc0dpZ2FjYWdlKG1fa2luZCkgJiYgZ19naWdhY2FnZUJhc2VQdHI7CiB9CiAKIHZvaWQgSGVh
cDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2lu
ZC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSw1OSBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCisjaW5jbHVkZSAiR2ln
YWNhZ2UuaCIKKwogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsK
ICAgICBQcmltYXJ5LAotICAgIEdpZ2FjYWdlCisgICAgUHJpbWl0aXZlR2lnYWNhZ2UsCisgICAg
SlNWYWx1ZUdpZ2FjYWdlCiB9OwogCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUhlYXBz
ID0gMjsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtSGVhcHMgPSAzOworCitJTkxJTkUg
Ym9vbCBpc0dpZ2FjYWdlKEhlYXBLaW5kIGhlYXBLaW5kKQoreworICAgIHN3aXRjaCAoaGVhcEtp
bmQpIHsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgY2FzZSBIZWFwS2lu
ZDo6SlNWYWx1ZUdpZ2FjYWdlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQkNS
QVNIKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitJTkxJTkUgR2lnYWNhZ2U6OktpbmQgZ2ln
YWNhZ2VLaW5kKEhlYXBLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBIZWFwS2luZDo6UHJpbWFyeToKKyAgICAgICAgQkNSQVNIKCk7CisgICAgICAgIHJldHVybiBH
aWdhY2FnZTo6UHJpbWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdl
OgorICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsKKyAgICBjYXNlIEhlYXBLaW5k
OjpKU1ZhbHVlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6SlNWYWx1ZTsKKyAg
ICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7Cit9CisK
K0lOTElORSBIZWFwS2luZCBoZWFwS2luZChHaWdhY2FnZTo6S2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1pdGl2ZToKKyAgICAgICAgcmV0
dXJuIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZTsKKyAgICBjYXNlIEdpZ2FjYWdlOjpKU1Zh
bHVlOgorICAgICAgICByZXR1cm4gSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZTsKKyAgICB9Cisg
ICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltYXJ5OworfQogCiB9IC8vIG5h
bWVzcGFjZSBibWFsbG9jCiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaAkocmV2aXNpb24g
MjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBJbmxpbmVfaAotI2RlZmluZSBJbmxpbmVfaAotCi0jZGVmaW5lIElO
TElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5saW5lCi0KLSNkZWZpbmUgTk9f
SU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKLQotI2VuZGlmIC8vIElubGluZV9oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvTWFwLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
TWFwX2gKICNkZWZpbmUgTWFwX2gKIAotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJ
bmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgUGVyUHJvY2Vzc19oCiAjZGVmaW5lIFBlclByb2Nlc3NfaAogCi0j
aW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIlNpemVz
LmgiCiAjaW5jbHVkZSAiU3RhdGljTXV0ZXguaCIKICNpbmNsdWRlIDxtdXRleD4KSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBA
QAogI2lmbmRlZiBQZXJUaHJlYWRfaAogI2RlZmluZSBQZXJUaHJlYWRfaAogCisjaW5jbHVkZSAi
QklubGluZS5oIgogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgIklubGluZS5oIgog
I2luY2x1ZGUgIlBlckhlYXBLaW5kLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgogI2luY2x1
ZGUgPG11dGV4PgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaWZuZGVmIFZlY3Rvcl9oCiAjZGVmaW5lIFZlY3Rvcl9oCiAKLSNpbmNs
dWRlICJJbmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0
ZS5oIgogI2luY2x1ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8Y3N0cmluZz4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317372</attachid>
            <date>2017-08-06 11:29:16 -0700</date>
            <delta_ts>2017-08-06 11:43:51 -0700</delta_ts>
            <desc>starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72807</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw5ICszODAyLDkgQEAg
aW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBib29sIGlzVwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitzdGF0aWMgdm9p
ZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewotICAgIGRhdGFMb2coIkdpZ2Fj
YWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOworICAgIGRhdGFMb2coIlByaW1pdGl2ZSBnaWdh
Y2FnZSBkaXNhYmxlZCEgQWJvcnRpbmcuXG4iKTsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKIH0KIApAQCAtMzgyNyw3ICszODI3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOwogI2VuZGlmCiAg
ICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQoKSkKLSAgICAgICAgR2lnYWNhZ2U6OmFk
ZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKKyAgICAgICAgR2ln
YWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2Fi
bGVkLCBudWxscHRyKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0gcnVuSlNDKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsK
IAogICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZv
cihuZXdTaXplKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKIAogICAgICAg
ICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ss
IHRoaXMgY2FzZSB3b3VsZCBzdWNrIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2Jq
ZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAgICAgCiAg
ICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
bV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpKSB7CisgICAgICAg
IGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKQEAgLTc4NjgsNyArNzg2OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6
ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yKHNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlU3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOwogCiAgICAgaWYg
KCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKQEAgLTc5MTMsNyArNzkxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBv
dXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAg
ICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRvckZvcihuZXdT
aXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC04NDk0LDcgKzg0OTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICBtX2ppdC5lbWl0
QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5h
dXhpbGlhcnlTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgc3RvcmFnZUdQ
UiwgbV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNhZ2VTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwKICAgICAgICAgc2NyYXRjaEdQUjIsIHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2l6ZUdQUik7CkBAIC0xMDExMiw3ICsxMDExMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmYKICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gxKTsKICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksIHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZCgKLSAgICAgICAgc3RvcmFnZVJlc3VsdEdQUiwgbV9qaXQudm0oKS0+YXV4
aWxpYXJ5U3BhY2UsIHNjcmF0Y2gyLCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNsb3dDYXNlcyk7Cisg
ICAgICAgIHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZVNwYWNl
LCBzY3JhdGNoMiwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOwogICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VSZXN1bHRH
UFIpOwogCiAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVzdWx0R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0MCw3ICs1MDQwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0
cl90Pig3KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ5dGVTaXpl
LCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9y
U2l6ZSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UsIGJ5dGVTaXplLCBzbG93Q2FzZSk7CiAg
ICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBz
bG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwbGF0V29yZHMoCkBAIC05MDQ5
LDcgKzkwNDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmludFB0clplcm8pOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlh
cnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAorICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0b3JGb3JTaXplKHZtKCkuanNWYWx1ZUdpZ2FjYWdlU3BhY2UsIGJ1dHRlcmZseVNpemUs
IHNsb3dQYXRoKSwKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwogCiAgICAgICAgICAg
ICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKQEAgLTEwMDA1LDcg
KzEwMDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogCiAgICAgICAgIHNpemVfdCBzaXpl
SW5CeXRlcyA9IHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihz
aXplSW5CeXRlcyk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5q
c1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0ZXMpOwogICAgICAgICBM
VmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRl
cmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdElu
dFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFn
ZSkpOwpAQCAtMTEyMzMsNyArMTEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgYnV0
dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlhcnlTcGFj
ZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZVNwYWNlLCBidXR0ZXJmbHlTaXpl
LCBmYWlsQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwoYWxsb2NhdG9yLCBmYWlsQ2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgTFZhbHVl
IGJ1dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIo
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwpAQCAtMTE2MTQsMzQgKzExNjE0LDM1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGNhZ2VkKExWYWx1ZSBwdHIp
CisgICAgTFZhbHVlIGNhZ2VkKEtpbmQga2luZCwgTFZhbHVlIHB0cikKICAgICB7Ci0gICAgICAg
IGlmICh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtKCkuZ2lnYWNhZ2VFbmFibGVkKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYmFzZVB0ciA9IG1fb3V0LmNvbnN0
SW50UHRyKGdfZ2lnYWNhZ2VCYXNlUHRyKTsKLSAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gbV9v
dXQuY29uc3RJbnRQdHIoR0lHQUNBR0VfTUFTSyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgQjMgbWVzc2luZyB1cCB0aGUgYml0QW5k
LiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4Y2VsbGVudAotICAgICAgICAgICAgLy8gY29k
ZWdlbiBmb3IgMi1vcGVyYW5kIGFuZHEgb24geDg2LTY0LgotICAgICAgICAgICAgTFZhbHVlIG1h
c2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBCdXQgQjMgd2lsbCBjdXJyZW50bHkgbWVzcyB1cCB0aGUgY29kZSBnZW5lcmF0aW9uIG9m
IHRoaXMgYWRkLiBCYXNpY2FsbHksIGFueSBvZmZzZXQgZnJvbSB3aGF0IHdlCi0gICAgICAgICAg
ICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lhdGVkIGFuZCBmb2xkZWQgd2l0aCBn
X2dpZ2FjYWdlQmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGluIHdoaWNoCi0gICAgICAgICAgICAv
LyBtb3ZlQ29uc3RhbnRzKCkgb2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0byByZWFzc29jaWF0ZSBp
biBvcmRlciB0byBob2lzdCB0aGUgYmlnIGNvbnN0YW50cy4gQnV0Ci0gICAgICAgICAgICAvLyBp
dCdzIG11Y2ggZWFzaWVyIHRvIGp1c3QgYmxvY2sgQjMncyBiYWRuZXNzIGhlcmUuIFRoYXQncyB3
aGF0IHdlIGRvIGZvciBub3cuCi0gICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAgICAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2VQdHIpOwotICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKG1hc2tlZCk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgW10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgICAgIHJldHVybiBwYXRjaHBvaW50Owor
ICAgICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKSB7CisgICAgICAgICAgICBp
ZiAodm0oKS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtKCkucHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBwdHI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBwdHI7CisgICAg
ICAgIExWYWx1ZSBiYXNlUHRyID0gbV9vdXQuY29uc3RJbnRQdHIoR2lnYWNhZ2U6OmJhc2VQdHIo
a2luZCkpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LmNvbnN0SW50UHRyKEdJR0FDQUdF
X01BU0spOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCBCMyBtZXNzaW5nIHVwIHRoZSBiaXRBbmQuIEFsc28sIHdlIHdhbnQgdG8gZ2V0IEIzJ3MgZXhj
ZWxsZW50CisgICAgICAgIC8vIGNvZGVnZW4gZm9yIDItb3BlcmFuZCBhbmRxIG9uIHg4Ni02NC4K
KyAgICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOworICAgICAg
ICAKKyAgICAgICAgLy8gQnV0IEIzIHdpbGwgY3VycmVudGx5IG1lc3MgdXAgdGhlIGNvZGUgZ2Vu
ZXJhdGlvbiBvZiB0aGlzIGFkZC4gQmFzaWNhbGx5LCBhbnkgb2Zmc2V0IGZyb20gd2hhdCB3ZQor
ICAgICAgICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lhdGVkIGFuZCBmb2xkZWQg
d2l0aCBHaWdhY2FnZTo6YmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGluIHdoaWNoCisgICAgICAg
IC8vIG1vdmVDb25zdGFudHMoKSBvYnNlcnZlcyB0aGF0IGl0IG5lZWRzIHRvIHJlYXNzb2NpYXRl
IGluIG9yZGVyIHRvIGhvaXN0IHRoZSBiaWcgY29uc3RhbnRzLiBCdXQKKyAgICAgICAgLy8gaXQn
cyBtdWNoIGVhc2llciB0byBqdXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBoZXJlLiBUaGF0J3Mgd2hh
dCB3ZSBkbyBmb3Igbm93LgorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIoYmFzZVB0cik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVS
ZWdpc3RlcihtYXNrZWQpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAg
ICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBy
ZXR1cm4gcGF0Y2hwb2ludDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBidWlsZFN3aXRjaChTd2l0
Y2hEYXRhKiBkYXRhLCBMVHlwZSB0eXBlLCBMVmFsdWUgc3dpdGNoVmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1GYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IqIHJlc3VsdDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VGbGFnLAotICAgICAgICBbXSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBuZXcgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsK
LSAgICAgICAgfSk7Ci0gICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KIEZhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCiB7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0YW5jZSgpOwotCisgICAgRmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICB+RmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKTsKICAgICAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnko
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwogICAgIHZvaWQgZnJlZUFs
aWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMjQgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNsdWRlIDxtdXRleD4KLSNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKLUdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciYgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0
YW5jZSgpCi17Ci0gICAgc3RhdGljIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogcmVz
dWx0OwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxf
b25jZSgKLSAgICAgICAgb25jZUZsYWcsCi0gICAgICAgIFtdIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IG5ldyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKLSAgICAgICAgfSk7Ci0g
ICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KLUdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKK0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdpZ2FjYWdlOjpLaW5kIGtp
bmQpCisgICAgOiBtX2tpbmQoa2luZCkKIHsKIH0KIApAQCAtNTMsMTcgKzM5LDE3IEBAIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fkdpZ2FjYWcKIAogdm9pZCogR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKG1fa2luZCwgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCBHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqIGJhc2VQdHIpCiB7Ci0gICAg
R2lnYWNhZ2U6OmFsaWduZWRGcmVlKGJhc2VQdHIpOworICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJl
ZShtX2tpbmQsIGJhc2VQdHIpOwogfQogCiB2b2lkIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiR2ln
YWNhZ2UiKTsKKyAgICBvdXQucHJpbnQoR2lnYWNhZ2U6Om5hbWUobV9raW5kKSwgIkdpZ2FjYWdl
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTMg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgor
I2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgewogcHVibGljOgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIHNpbmdsZXRv
bi4gVGhlcmUgc2hvdWxkIGJlIGRpZmZlcmVudCBpbnN0YW5jZXMgZm9yIHByaW1hcmllcywgSlNW
YWx1ZXMsCi0gICAgLy8gYW5kIG90aGVyIHRoaW5ncy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5Ci0gICAgc3RhdGljIEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCk7CiAgICAgfkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpOwogICAgIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CkBAIC00NCw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKyAgICBHaWdhY2Fn
ZTo6S2luZCBtX2tpbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzc2LDEwICszNzYsMTAgQEAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICBlbmQpCiBlbmQKIAotbWFj
cm8gbG9hZENhZ2VkKHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKK21hY3JvIGxvYWRDYWdlZChiYXNl
UHRyLCBzb3VyY2UsIGRlc3QsIHNjcmF0Y2gpCiAgICAgbG9hZHAgc291cmNlLCBkZXN0CiAgICAg
aWYgR0lHQUNBR0VfRU5BQkxFRCBhbmQgbm90IENfTE9PUAotICAgICAgICBsb2FkcCBfZ19naWdh
Y2FnZUJhc2VQdHIsIHNjcmF0Y2gKKyAgICAgICAgbG9hZHAgYmFzZVB0ciwgc2NyYXRjaAogICAg
ICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgY29uc3RleHByIEdJR0FDQUdF
X01BU0ssIGRlc3QKICAgICAgICAgYWRkcCBzY3JhdGNoLCBkZXN0CkBAIC0xMjA5LDcgKzEyMDks
NyBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAg
IGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGlu
ZQotICAgIGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0s
IG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNh
Z2VCYXNlUHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVj
dEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4
aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJl
YWR5CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCBlbmQKIAogbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUs
IHNjcmF0Y2gpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9m
ZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmpl
Y3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgc2NyYXRjaCkKKyAgICBsb2FkQ2FnZWQo
X2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFu
ZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCBzY3JhdGNoKQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0
QXNJbnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBfbGxpbnRfb3BfZ2V0
X2FycmF5X2xlbmd0aDoKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNs
b3cKICAgICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRDYWdlZChKU09iamVj
dDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdh
Y2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MikKICAgICBsb2Fk
aSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJs
aWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5vcEdldEFycmF5TGVuZ3RoU2xvdwog
ICAgIG9ycSB0YWdUeXBlTnVtYmVyLCB0MApAQCAtMTQ4MSw3ICsxNDgxLDcgQEAgX2xsaW50X29w
X2dldF9ieV92YWw6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQzKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGky
cSB0MSwgdDEKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMsIHQ1
KQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDBdLCB0MywgdDUpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBlTWFzaywgdDIKICAg
ICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAub3BHZXRCeVZhbElzQ29udGlndW91cwogICAgIGJpbmVx
IHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwpAQCAtMTUyOCw3
ICsxNTI4LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgYmlhIHQyLCBMYXN0QXJyYXlU
eXBlIC0gRmlyc3RBcnJheVR5cGUsIC5vcEdldEJ5VmFsU2xvdwogICAgIAogICAgICMgU3dlZXQs
IG5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIHR5cGVkIGFycmF5LiBEbyBzb21lIGJhc2ljIHRo
aW5ncyBub3cuCi0gICAgbG9hZENhZ2VkKEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0s
IHQzLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2dfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyLCBKU0Fy
cmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDUpCiAgICAgYmlhZXEgdDEsIEpTQXJy
YXlCdWZmZXJWaWV3OjptX2xlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdwogICAgIAogICAgICMg
Tm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzLiBOb3RlIHRoYXQgd2UgY2FuIHRy
ZWF0IFVpbnQ4QXJyYXlUeXBlIGFuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRp
bWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYg
dm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LSAgICB2b2lkKiBiYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUoc2l6ZSk7CisgICAg
dm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRlKHNpemUpOwogICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03MCw3ICs3MCw3IEBAIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5k
ZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKHNpemUp
OworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShz
aXplKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsK
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJ
bmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVf
dCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uYXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFs
dWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgIGlmICghbmV3QmFzZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hv
dWxkbid0IGJlIGEgbWVtY3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4o
SlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVlKTsKIAogICAgIGlm
ICh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cykKLSAgICAgICAgdmlzaXRvci5tYXJrQXV4
aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCgpKTsKKyAgICAgICAgdmlz
aXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCgpLmdl
dCgpKTsKICAgICBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRy
ZW4odGhpc0NlbGwsIHZpc2l0b3IpOwogfQogCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEaXJl
Y3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgp
LT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgRG9udEVudW0pOwogICAgIAotICAgIHZvaWQq
IGJhY2tpbmdTdG9yZSA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG1hcHBlZEFyZ3Vt
ZW50c1NpemUoKSk7CisgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0ucHJpbWl0aXZlR2lnYWNh
Z2VTcGFjZS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8
Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBvdmVycmlkZXMpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpv
dmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZN
JiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2FyeSh2
bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKKyAgICBtX21h
cHBlZEFyZ3VtZW50cy5nZXQoKS5nZXQoKVtpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVj
dEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50c09mZnNldC5o
IgogI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIKKyNpbmNsdWRlIDx3dGYvQ2FnZWRQdHIu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJfdCBtX2xlbmd0
aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQg
bmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICB1aW50
MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1p
bmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2Fw
YWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5
IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCi0gICAgQXV4aWxpYXJ5QmFycmllcjxib29sKj4gbV9t
YXBwZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2Fs
bGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KKyAgICBB
dXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2wqPj4gbV9t
YXBwZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2Fs
bGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNs
dWRlIDx3dGYvQ2FnZWRQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYwLDcgKzYxLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgICAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJvb2wqPiBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcjsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEdpZ2FjYWdl
OjpQcmltaXRpdmUsIGJvb2wqPj4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjIwMzIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcikKLSAgICAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmpl
Y3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpKTsKKyAgICAgICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
LmdldCgpLmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTI2MSw3ICsy
NjEsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChh
cmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7
CisgICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2Uu
dHJ5QWxsb2NhdGUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmFja2luZ1N0b3JlKTsKICAgICAgICAgYm9vbCogbW9kaWZp
ZWRBcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICAgICAg
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3Vt
ZW50cyk7CkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpz
ZXRNb2RpZmllZAogewogICAgIGluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vz
c2FyeSh2bSwgbGVuZ3RoKTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgICAgIG1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpLmdldCgpW2luZGV4XSA9IHRydWU7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTEsNyArMjkxLDcgQEAgYm9vbCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQQogICAgIGlmICghbV9tb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXQo
KVtpbmRleF07CisgICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5n
ZXQoKS5nZXQoKVtpbmRleF07CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDIyMDMyMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMTg4LDcgKzE4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwot
ICAgICAgICB2b2lkKiBkYXRhID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2Nh
dGlvblNpemUpOworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2Uu
dHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTY1NSw3ICs2NTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CiAgICAgV3JpdGVCYXJyaWVyPEhhc2hN
YXBCdWNrZXRUeXBlPiBtX3RhaWw7Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVy
VHlwZSo+IG1fYnVmZmVyOworICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8R2lnYWNhZ2U6
OkpTVmFsdWUsIEhhc2hNYXBCdWZmZXJUeXBlKj4+IG1fYnVmZmVyOwogICAgIHVpbnQzMl90IG1f
a2V5Q291bnQ7CiAgICAgdWludDMyX3QgbV9kZWxldGVDb3VudDsKICAgICB1aW50MzJfdCBtX2Nh
cGFjaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5k
ZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5
OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgp
OwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZv
aWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENv
bnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAt
OTgsNyArOTgsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7
CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZl
Y3Rvckxlbmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRl
eHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgdm9pZCog
dGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4
dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9y
YWdlKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVs
c2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNp
dHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUobmV3U2l6ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZVNw
YWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVz
aXJlZENhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgaW5saW5lIEpTQXJyYXkq
IEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGln
dW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lk
KiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdp
Z2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
b3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOwogICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxp
bmVTdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0
aCwgZWxlbWVudFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9
IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIHNpemUpOworICAgICAgICAg
ICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwg
c2l6ZSk7CiAgICAgICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSlNMb2Nr
OjpkaWRBY3F1aXJlTG9jaygpCiAgICAgLy8gTm90ZTogZXZlcnl0aGluZyBiZWxvdyBtdXN0IGNv
bWUgYWZ0ZXIgYWRkQ3VycmVudFRocmVhZCgpLgogICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3Jh
YkFsbExvY2tzKCk7CiAgICAgCi0gICAgbV92bS0+ZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNz
YXJ5KCk7CisgICAgbV92bS0+ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5
KCk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBsaW5nUHJv
ZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIyMDMy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQg
cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVk
OgotICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8QnV0dGVyZmx5Pj4gbV9idXR0ZXJmbHk7
CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwgQnV0dGVy
Zmx5Pj4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAg
dWludDMyX3QgbV9wYWRkaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5p
bml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmds
b2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9iamVj
dC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVtcCA9
IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZt
LmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NSwxNSArMTY1LDE5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcnVuTG9vcChDRlJ1bkxvb3BHZXRDdXJyZW50KCkpCiAj
ZW5kaWYgLy8gVVNFKENGKQogICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkKLSAgICAsIGF1eGls
aWFyeVNwYWNlKCJBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3RO
ZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCAmR2lnYWNhZ2VBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFw
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0g
ICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBB
bGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCAm
RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBzdHJp
bmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6Omluc3RhbmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVj
dGlibGVPYmplY3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKCkpCi0gICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFn
ZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhlYXAsICZGYXN0TWFs
bG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIGZhc3RNYWxsb2NB
bGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4oKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKKyAg
ICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQorICAgICwgcHJpbWl0aXZl
R2lnYWNhZ2VTcGFjZSgiUHJpbWl0aXZlR2lnYWNhZ2UiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1
dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBwcmltaXRp
dmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFsdWVHaWdhY2FnZVNwYWNlKCJK
U1ZhbHVlR2lnYWNhZ2UiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Iu
Z2V0KCkpCisgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0
ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJs
ZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc3RyaW5n
U3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAs
IGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVP
YmplY3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNw
YWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxs
b2NhdG9yLmdldCgpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5
Q29kZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsICZGYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIHdlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAg
ICAgLCBjbGllbnREYXRhKDApCkBAIC0yMTEsNyArMjE1LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5
cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9jb2RlQ2FjaGUoc3RkOjptYWtlX3VuaXF1
ZTxDb2RlQ2FjaGU+KCkpCiAgICAgLCBtX2J1aWx0aW5FeGVjdXRhYmxlcyhzdGQ6Om1ha2VfdW5p
cXVlPEJ1aWx0aW5FeGVjdXRhYmxlcz4oKnRoaXMpKQogICAgICwgbV90eXBlUHJvZmlsZXJFbmFi
bGVkQ291bnQoMCkKLSAgICAsIG1fZ2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKKyAgICAsIG1f
cHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKICAgICAsIG1fY29udHJvbEZsb3dQ
cm9maWxlckVuYWJsZWRDb3VudCgwKQogICAgICwgbV9zaGFkb3dDaGlja2VuKHN0ZDo6bWFrZV91
bmlxdWU8U2hhZG93Q2hpY2tlbj4oKSkKIHsKQEAgLTI5MCw3ICsyOTQsNyBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaW5pdGlhbGl6ZUhvc3RDYWxsUmV0
dXJuVmFsdWUoKTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmluY2UgdGhlIGxpbmtlciBub3Qg
dG8gZHJvcCBob3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCiAjZW5kaWYKICAgICAKLSAgICBHaWdh
Y2FnZTo6YWRkRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7
CisgICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOwogCiAgICAgaGVhcC5ub3RpZnlJc1NhZmVUb0Nv
bGxlY3QoKTsKICAgICAKQEAgLTM1NCw3ICszNTgsNyBAQCBWTTo6flZNKCkKIHsKICAgICBhdXRv
IGRlc3RydWN0aW9uTG9ja2VyID0gaG9sZExvY2soc19kZXN0cnVjdGlvbkxvY2sucmVhZCgpKTsK
ICAgICAKLSAgICBHaWdhY2FnZTo6cmVtb3ZlRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJs
ZWRDYWxsYmFjaywgdGhpcyk7CisgICAgR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVD
YWxsYmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOwogICAgIHBy
b21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7CiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkpCkBAIC00MjMs
MjEgKzQyNywyMSBAQCBWTTo6flZNKCkKICNlbmRpZgogfQogCi12b2lkIFZNOjpnaWdhY2FnZURp
c2FibGVkQ2FsbGJhY2sodm9pZCogYXJndW1lbnQpCit2b2lkIFZNOjpwcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkQ2FsbGJhY2sodm9pZCogYXJndW1lbnQpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8Vk0q
Pihhcmd1bWVudCktPmdpZ2FjYWdlRGlzYWJsZWQoKTsKKyAgICBzdGF0aWNfY2FzdDxWTSo+KGFy
Z3VtZW50KS0+cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogfQogCi12b2lkIFZNOjpnaWdh
Y2FnZURpc2FibGVkKCkKK3ZvaWQgVk06OnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKQogewog
ICAgIGlmIChtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpIHsKLSAgICAg
ICAgbV9naWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIkdpZ2FjYWdlIGRpc2FibGVkIik7
CisgICAgICAgIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJQcmlt
aXRpdmUgZ2lnYWNhZ2UgZGlzYWJsZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKICAg
ICAvLyBUaGlzIGlzIHRvdGFsbHkgcmFjeSwgYW5kIHRoYXQncyBPSy4gVGhlIHBvaW50IGlzLCBp
dCdzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IHRoZXkgcGFzcyB0aGUKICAgICAvLyB1
bmNhZ2VkIGJ1ZmZlciBpbiBhIG5pY2VseSBzeW5jaHJvbml6ZWQgbWFubmVyLgotICAgIG1fbmVl
ZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCA9IHRydWU7CisgICAgbV9uZWVkVG9GaXJlUHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBWTTo6c2V0TGFzdFN0YWNrVG9wKHZv
aWQqIGxhc3RTdGFja1RvcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOCBAQCBjbGFzcyBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0
ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGNlcHRpb25T
Y29wZTsKK2NsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgR2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBU
eXBlUHJvZmlsZXI7CiBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CkBAIC0yODUsNyArMjg3LDEyIEBA
IHByaXZhdGU6CiBwdWJsaWM6CiAgICAgSGVhcCBoZWFwOwogICAgIAotICAgIFN1YnNwYWNlIGF1
eGlsaWFyeVNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4gbV9mYXN0TWFsbG9jQWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1fcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0
b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4g
bV9qc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3I7CisgICAgCisgICAgU3Vic3BhY2UgcHJpbWl0aXZl
R2lnYWNhZ2VTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMg
Z28gaGVyZS4KKyAgICBTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VTcGFjZTsgLy8gQnV0dGVyZmxp
ZXMsIGFycmF5cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCiAgICAgCiAgICAgLy8gV2hlbmV2
ZXIgcG9zc2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4odm0pIHRvIGdldCBvbmUgb2Yg
dGhlc2Ugc3Vic3BhY2VzLgogICAgIFN1YnNwYWNlIGNlbGxTcGFjZTsKQEAgLTUyNCwxMSArNTMx
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkKiBsYXN0U3RhY2tUb3AoKSB7IHJldHVybiBtX2xhc3RT
dGFja1RvcDsgfQogICAgIHZvaWQgc2V0TGFzdFN0YWNrVG9wKHZvaWQqKTsKICAgICAKLSAgICB2
b2lkIGZpcmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgpCisgICAgdm9pZCBmaXJlUHJpbWl0
aXZlR2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmVl
ZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCkgewotICAgICAgICAgICAgbV9uZWVkVG9GaXJlR2lnYWNh
Z2VFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2dpZ2FjYWdlRW5hYmxlZC5maXJlQWxs
KCp0aGlzLCAiR2lnYWNhZ2UgZGlzYWJsZWQgYXN5bmNocm9ub3VzbHkiKTsKKyAgICAgICAgaWYg
KG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCkgeworICAgICAgICAgICAgbV9u
ZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkID0gZmFsc2U7CisgICAgICAgICAgICBt
X3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiUHJpbWl0aXZlIGdpZ2Fj
YWdlIGRpc2FibGVkIGFzeW5jaHJvbm91c2x5Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYz
Myw3ICs2NDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25j
ZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogICAgIAotICAgIElubGluZVdh
dGNocG9pbnRTZXQmIGdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fZ2lnYWNhZ2VFbmFibGVk
OyB9CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkg
eyByZXR1cm4gbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7IH0KIAogICAgIEJ1aWx0aW5FeGVj
dXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWlsdGluRXhlY3V0YWJs
ZXMuZ2V0KCk7IH0KIApAQCAtNzQxLDggKzc0OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2ZXJp
ZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZCh1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbiYpOwogI2VuZGlmCiAgICAgCi0gICAgc3RhdGljIHZvaWQgZ2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKLSAgICB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQoKTsKKyAg
ICBzdGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOwor
ICAgIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUikKICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwpAQCAtNzg3LDggKzc5NCw4IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7
CiAgICAgdW5zaWduZWQgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQ7Ci0gICAgYm9vbCBtX25l
ZWRUb0ZpcmVHaWdhY2FnZUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIElubGluZVdhdGNocG9pbnRT
ZXQgbV9naWdhY2FnZUVuYWJsZWQ7CisgICAgYm9vbCBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdh
Y2FnZUVuYWJsZWQgeyBmYWxzZSB9OworICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRp
dmVHaWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2Zp
bGVyPiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CiAgICAgdW5zaWduZWQgbV9jb250cm9sRmxvd1By
b2ZpbGVyRW5hYmxlZENvdW50OwpJbmRleDogU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCShyZXZpc2lvbiAyMjAzMjMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8
R2lnYWNhZ2U6OktpbmQga2luZCwgdHlwZW5hbWUgVD4KIGNsYXNzIENhZ2VkUHRyIHsKIHB1Ymxp
YzoKICAgICBDYWdlZFB0cihUKiBwdHIgPSBudWxscHRyKQpAQCAtNDAsNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3B0cik7Ci0g
ICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQobV9wdHIpOworICAgICAgICByZXR1cm4gR2ln
YWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKICAgICB9CiAgICAgCiAgICAgVCogZ2V0TWF5QmVO
dWxsKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBjb25zdCB2b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsK
IAotdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNp
emVfdCBzaXplKQogewogICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhzaXplKTsKICAg
ICB2b2lkKiByZWFsUmVzdWx0OwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHZvaWQqIHRyeU1hbGxvYyhz
aXplX3Qgc2l6ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCogdHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhL
aW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNv
bW1pdHRlZChzaXplKTsKIH0KIAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIs
IHNpemVfdCBzaXplKQordm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIs
IHNpemVfdCBzaXplKQogewogICAgIE9TQWxsb2NhdG9yOjpyZWxlYXNlRGVjb21taXR0ZWQoYmFz
ZVB0ciwgc2l6ZSk7CiB9CkBAIC02Nyw0MiArNjcsNTEgQEAgbmFtZXNwYWNlIEdpZ2FjYWdlIHsK
IC8vIGFuZCBzdGF5IHNjcmFtYmxlZCBleGNlcHQganVzdCBiZWZvcmUgdXNlLgogLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAzNQogCi12b2lkKiB0cnlBbGln
bmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxpZ25l
ZE1hbGxvYyhLaW5kIGtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotICAg
IHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXpl
LCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxs
b2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChr
aW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBhbGlnbmVkRnJlZSh2b2lkKiBwKQordm9pZCBhbGlnbmVkRnJlZShLaW5kIGtpbmQs
IHZvaWQqIHApCiB7Ci0gICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5k
OjpHaWdhY2FnZSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9B
U1NFUlQoaXNDYWdlZChraW5kLCBwKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxs
b2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAotdm9p
ZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQga2luZCwgc2l6
ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNYWxsb2Mo
c2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBi
bWFsbG9jOjphcGk6OnRyeU1hbGxvYyhzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAg
ICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBm
cmVlKHZvaWQqIHApCit2b2lkIGZyZWUoS2luZCBraW5kLCB2b2lkKiBwKQogewotICAgIGJtYWxs
b2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIGlmICgh
cCkKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FnZWQoa2luZCwgcCkp
OworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAg
ICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBh
Z2VzKHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCBraW5k
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxh
cmdlTWVtYWxpZ25WaXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6SGVhcEtp
bmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxhcmdl
TWVtYWxpZ25WaXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQo
a2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3QpCit2b2lkIGZy
ZWVWaXJ0dWFsUGFnZXMoS2luZCBraW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3QpCiB7Ci0gICAg
Ym1hbGxvYzo6YXBpOjpmcmVlTGFyZ2VWaXJ0dWFsKGJhc2VQdHIsIGJtYWxsb2M6OkhlYXBLaW5k
OjpHaWdhY2FnZSk7CisgICAgaWYgKCFiYXNlUHRyKQorICAgICAgICByZXR1cm47CisgICAgUkVM
RUFTRV9BU1NFUlQoaXNDYWdlZChraW5kLCBiYXNlUHRyKSk7CisgICAgYm1hbGxvYzo6YXBpOjpm
cmVlTGFyZ2VWaXJ0dWFsKGJhc2VQdHIsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBX
VEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMjAz
MjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywy
NSArMzcsNDcgQEAgZXh0ZXJuIFdURl9FWFBPUlREQVRBIGNvbnN0IHZvaWQqIGdfZ2lnYQogCiBu
YW1lc3BhY2UgR2lnYWNhZ2UgewogCitlbnVtIEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBK
U1ZhbHVlCit9OworCiBpbmxpbmUgdm9pZCBlbnN1cmVHaWdhY2FnZSgpIHsgfQotaW5saW5lIHZv
aWQgZGlzYWJsZUdpZ2FjYWdlKCkgeyB9CitpbmxpbmUgdm9pZCBkaXNhYmxlUHJpbWl0aXZlR2ln
YWNhZ2UoKSB7IH0KIGlubGluZSBib29sIHNob3VsZEJlRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNl
OyB9CiAKLWlubGluZSB2b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZv
aWQqKSB7IH0KLWlubGluZSB2b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lk
KiksIHZvaWQqKSB7IH0KK2lubGluZSB2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2
b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0KK2lubGluZSB2b2lkIHJlbW92ZVByaW1pdGl2ZURp
c2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0KKworQUxXQVlTX0lOTElO
RSBjb25zdCBjaGFyKiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIFByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOworICAgIGNhc2Ug
SlNWYWx1ZToKKyAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkKiYgYmFzZVB0cihLaW5kKQoreworICAgIHJldHVybiBnX2dpZ2FjYWdlQmFzZVB0
cjsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiBjYWdlZChUKiBwdHIpIHsg
cmV0dXJuIHB0cjsgfQoraW5saW5lIFQqIGNhZ2VkKEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRy
OyB9CiAKLWlubGluZSBib29sIGlzQ2FnZWQoY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9
CitpbmxpbmUgYm9vbCBpc0NhZ2VkKEtpbmQsIGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsg
fQogCi1pbmxpbmUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkgeyByZXR1cm4gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsg
fQotaW5saW5lIHZvaWQgYWxpZ25lZEZyZWUodm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7
IH0KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpOwotaW5s
aW5lIHZvaWQgZnJlZSh2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CitpbmxpbmUgdm9pZCogdHJ5
QWxpZ25lZE1hbGxvYyhLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeyByZXR1
cm4gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsgfQoraW5saW5lIHZvaWQg
YWxpZ25lZEZyZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7IH0KK1dURl9F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90IHNpemUpOworaW5saW5l
IHZvaWQgZnJlZShLaW5kLCB2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVf
dCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdl
cyhLaW5kLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVh
bFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgR2lnYWNhZ2UKICNlbHNlCkBAIC02MywxMyArODUsMTMgQEAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZnJlZVZpcnR1YWxQYWdlcwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGlnbmVkRnJlZSh2b2lkKik7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmcmVlKHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGln
bmVkTWFsbG9jKEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGFsaWduZWRGcmVlKEtpbmQsIHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGZyZWUoS2luZCwgdm9pZCopOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxs
b2NhdGVWaXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUp
OworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBi
YXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0m
IHZtKQogICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMo
JnZtKQotICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBP
dXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNw
YWNlKCJXZWJDb3JlIEdsb2JhbCBPYmplY3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFw
LCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCBt
X291dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJh
aW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIG1fZ2xv
YmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmplY3Qgdy8g
T3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgp
KQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShy
ZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgY29uc3QgU2Vjb25k
cyBub25WaXNpYmxlUHJvY2Vzc0NsCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdm9p
ZCBnaWdhY2FnZURpc2FibGVkKHZvaWQqKQorc3RhdGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZCh2b2lkKikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAg
LTIwMyw3ICsyMDMsNyBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICAgICB9KTsKIAogICAg
IGlmIChHaWdhY2FnZTo6c2hvdWxkQmVFbmFibGVkKCkpCi0gICAgICAgIEdpZ2FjYWdlOjphZGRE
aXNhYmxlQ2FsbGJhY2soZ2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0cik7CisgICAgICAgIEdpZ2Fj
YWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxl
ZCwgbnVsbHB0cik7CiB9CiAKIFdlYlByb2Nlc3M6On5XZWJQcm9jZXNzKCkKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCQkxNERENzhDNjE4RjQ4
RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4
QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRE
RDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ5REI0NTE3RjI0NDcxMDBFQUFCNzkgLyog
Rml4ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4OURDRTFFMDA1NDZE
NjggLyogSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYwMTg5RENFMUUwMDU0
NkQ2OCAvKiBCSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAyIC8qIE11dGV4LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDREQ0VENjE3QTY0OUQ5MDA5
M0IyRjIgLyogTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNERENzhDQjE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyUHJvY2Vzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDZBMDcxN0E2MUZB
NDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQzE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyVGhyZWFk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlG
RDE3QTYxRjFGMDBGOUVBMUQgLyogUGVyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk0LDcgKzk0LDcgQEAKIAkJMTQwRkEwMDIxOUNF
NDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcFJhbmdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGluZU1ldGFkYXRhLmg7IHBh
dGggPSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0VHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlLmNwcDsgcGF0aCA9IGJtYWxsb2Mv
T2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTNFNDYwMTg5
RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0JJbmxp
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjIxODlERTFDRDAwNTQ2
RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5k
aW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcEFsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVFREU0MDA1
NDZENjggLyogQkFzc2VydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCQXNz
ZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3NlcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRoID0gYm1hbGxvYy9TeXNjYWxsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcsMTAgKzI4NywxMCBAQAogCQkJCTY1
OTlDNUNCMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCAqLywKIAkJCQkxNDEz
RTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovLAogCQkJCTBGNUJGMTcyMUYyM0M1
NzEwMDI5RDkxRCAvKiBCRXhwb3J0LmggKi8sCisJCQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4
IC8qIEJJbmxpbmUuaCAqLywKIAkJCQkxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRm
b3JtLmggKi8sCiAJCQkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9yLmgg
Ki8sCiAJCQkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi8sCi0JCQkJ
MTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovLAogCQkJCTE0MUQ5QUZGMUM4
RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8sCiAJCQkJNDQyNkUyN0UxQzgzOEVFMDAwOEVCMDQy
IC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0MiAvKiBMb2dn
aW5nLmggKi8sCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3
MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlDMTMw
MDExNUM5NyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCRjE0OTFGMjJBOEQ4MDAy
OUQ5MUQgLyogUGVySGVhcEtpbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3OEM5MThGNDhE
NzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0REQ3OEM5MThGNDhE
NzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRDMDdGNTFDN0I3
MDI2MDA1MUJCNkEgLyogTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qzg5OTJEMUND
NTc4MzMwMDI3QTA1NyAvKiBMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBGQTAw
NTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDcgKzE0OSw3IEBAIHZvaWQgQWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiAgICAgfQogfQogCi1OT19J
TkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0
b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKK0JOT19JTkxJTkUgdm9pZCBBbGxvY2F0
b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6
ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBt
X2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgTk9fSU5M
SU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0bwogICAgIG1faGVhcC5hbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUs
IG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKGxvY2spKTsKIH0KIAotSU5MSU5FIHZvaWQgQWxsb2Nh
dG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6
ZUNsYXNzKQorQklOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VDYWNo
ZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogICAgIGlm
ICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQpAQCAtMTY2LDEzICsxNjYsMTMgQEAgSU5MSU5FIHZv
aWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQgogICAgIHJldHVybiBhbGxvY2F0b3IucmVm
aWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRv
cjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKICAgICByZXR1cm4gbV9oZWFwLmFsbG9jYXRl
TGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQq
IEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6
ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhzaXplKTsKICAgICBCdW1wQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc107CkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAK
ICNkZWZpbmUgQXN5bmNUYXNrX2gKIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJJ
bmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNs
dWRlICJTaXplcy5oIgogI2luY2x1ZGUgPGF0b21pYz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklu
bGluZS5oCShyZXZpc2lvbiAyMjAzMjMpCShmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSW5s
aW5lLmg6MjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGluZV9oCisjZGVmaW5lIElubGluZV9oCisKKyNk
ZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKKworI2Rl
ZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorCisjZW5kaWYgLy8gSW5s
aW5lX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCShyZXZpc2lvbiAyMjAzMjMpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MTEgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElubGluZV9oCi0j
ZGVmaW5lIElubGluZV9oCisjaWZuZGVmIEJJbmxpbmVfaAorI2RlZmluZSBCSW5saW5lX2gKIAot
I2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlubGluZQorI2Rl
ZmluZSBCSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKIAotI2Rl
ZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBCTk9fSU5M
SU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIAotI2VuZGlmIC8vIElubGluZV9oCisjZW5k
aWYgLy8gQklubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcAkocmV2aXNpb24g
MjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRlICJC
SW5saW5lLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVk
ZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1hbGxv
YyB7CkBAIC00NiwyNyArNDYsMjcgQEAgQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5kKQog
ewogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2Fj
aGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBDYWNo
ZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90
IHNpemUpCiB7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRT
bG93Q2FzZSgpLT5hdChoZWFwS2luZCkuYWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoc2l6ZSk7CiB9
CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFw
S2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjphbGxv
Y2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsK
ICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCkt
PmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAotTk9fSU5MSU5F
IHZvaWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5k
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6
OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8
Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9jYXRl
KGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9jYXRl
U2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKK0JOT19J
TkxJTkUgdm9pZCBDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhl
YXBLaW5kLCB2b2lkKiBvYmplY3QpCiB7CiAgICAgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hl
Pj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5kZWFsbG9jYXRvcigpLmRlYWxsb2NhdGUo
b2JqZWN0KTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VO
dWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUp
CitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVh
cEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgcmV0
dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFw
S2luZCkuYWxsb2NhdG9yKCkucmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOwogfQpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgorI2luY2x1ZGUg
IkJJbmxpbmUuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkRlYWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiRGVidWdIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIklu
bGluZS5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAogLy8gRklYTUU6IEFzayBkeWxkIHRv
IHB1dCB0aGlzIGluIGl0cyBvd24gcGFnZSwgYW5kIG1wcm90ZWN0IHRoZSBwYWdlIGFmdGVyIHdl
IGVuc3VyZSB0aGUgZ2lnYWNhZ2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0OTcyCi12b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK3ZvaWQqIGdfcHJpbWl0
aXZlR2lnYWNhZ2VCYXNlUHRyOwordm9pZCogZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwogCiB1
c2luZyBuYW1lc3BhY2UgYm1hbGxvYzsKIApAQCAtNTMsOCArNTQsOCBAQCBzdHJ1Y3QgQ2FsbGJh
Y2sgewogICAgIHZvaWQqIGFyZ3VtZW50IHsgbnVsbHB0ciB9OwogfTsKIAotc3RydWN0IENhbGxi
YWNrcyB7Ci0gICAgQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IH0K
K3N0cnVjdCBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzIHsKKyAgICBQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IH0KICAgICAKICAgICBW
ZWN0b3I8Q2FsbGJhY2s+IGNhbGxiYWNrczsKIH07CkBAIC02OSw1MiArNzAsNTcgQEAgdm9pZCBl
bnN1cmVHaWdhY2FnZSgpCiAgICAgICAgICAgICBpZiAoIXNob3VsZEJlRW5hYmxlZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCogYmFz
ZVB0ciA9IHRyeVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwgR0lHQUNBR0VfU0laRSArIEdJR0FD
QUdFX1JVTldBWSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2VQdHIpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBh
Z2VzKGJhc2VQdHIsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBnX2dpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHI7CisgICAgICAgICAg
ICBmb3JFYWNoS2luZCgKKyAgICAgICAgICAgICAgICBbJl0gKEtpbmQga2luZCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogUmFuZG9taXplIHdoZXJlIHRoaXMgZ29lcy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTI0NQorICAgICAgICAgICAgICAgICAgICBiYXNlUHRyKGtpbmQpID0gdHJ5Vk1BbGxvY2F0
ZShHSUdBQ0FHRV9TSVpFLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFiYXNlUHRyKGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgZ2lnYWNh
Z2UuXG4iLCBuYW1lKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJDUkFTSCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKGJhc2VQdHIoa2luZCksIEdJR0FDQUdF
X1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9
KTsKICNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECiB9CiAKLXZvaWQgZGlzYWJsZUdpZ2FjYWdl
KCkKK3ZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkKIHsKICAgICBlbnN1cmVHaWdhY2Fn
ZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIpIHsKKyAgICBpZiAoIWdfcHJpbWl0aXZl
R2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0IHdhcyBuZXZlciBlbmFibGVkLiBUaGF0
IG1lYW5zIHRoYXQgd2UgbmV2ZXIgZXZlbiBzYXZlZCBhbnkgY2FsbGJhY2tzLiBPciwgd2UgaGFk
IGFscmVhZHkgZGlzYWJsZWQKICAgICAgICAgLy8gaXQgYmVmb3JlLCBhbmQgYWxyZWFkeSBjYWxs
ZWQgdGhlIGNhbGxiYWNrcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBDYWxs
YmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgpOwotICAgIHN0
ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxsYmFja3M+Ojpt
dXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVy
UHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAgc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxs
YmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxiYWNr
cy5jYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3VtZW50
KTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKLSAgICBnX2dpZ2FjYWdlQmFz
ZVB0ciA9IG51bGxwdHI7CisgICAgZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIgPSBudWxscHRy
OwogfQogCi12b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwg
dm9pZCogYXJndW1lbnQpCit2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgq
ZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7CiAgICAgZW5zdXJlR2lnYWNhZ2Uo
KTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CisgICAgaWYgKCFnX3ByaW1pdGl2ZUdp
Z2FjYWdlQmFzZVB0cikgewogICAgICAgICAvLyBJdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBvciB3
ZSB3ZXJlIG5ldmVyIGFibGUgdG8gZW5hYmxlIGl0LgogICAgICAgICBmdW5jdGlvbihhcmd1bWVu
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQ2FsbGJhY2tzJiBjYWxsYmFj
a3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7CisgICAg
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8UHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6bXV0ZXgo
KSk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNoKENhbGxiYWNrKGZ1bmN0aW9uLCBhcmd1
bWVudCkpOwogfQogCi12b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24p
KHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCit2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxs
YmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7Ci0gICAgQ2Fs
bGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBz
dGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6
bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBl
clByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2Fs
bGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja3Mu
Y2FsbGJhY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuY2FsbGJhY2tz
W2ldLmZ1bmN0aW9uID09IGZ1bmN0aW9uCiAgICAgICAgICAgICAmJiBjYWxsYmFja3MuY2FsbGJh
Y2tzW2ldLmFyZ3VtZW50ID09IGFyZ3VtZW50KSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdh
Y2FnZS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2Fj
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJBc3Nl
cnQuaCIKICNpbmNsdWRlICJCRXhwb3J0LmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1
ZGUgIkJQbGF0Zm9ybS5oIgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKQEAgLTQ0LDIzICs0NSw2
MCBAQAogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDAKICNlbmRpZgogCi1leHRlcm4gIkMiIEJF
WFBPUlQgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9pZCog
Z19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9pZCogZ19q
c1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCitlbnVtIEtp
bmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVlCit9OworCiBCRVhQT1JUIHZvaWQgZW5z
dXJlR2lnYWNhZ2UoKTsKIAotQkVYUE9SVCB2b2lkIGRpc2FibGVHaWdhY2FnZSgpOworQkVYUE9S
VCB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpOworCisvLyBUaGlzIHdpbGwgY2FsbCB0
aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1lZGlhdGVseSBpZiB0aGUgUHJpbWl0aXZlIEdpZ2FjYWdl
IGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KK0JFWFBPUlQgdm9pZCBhZGRQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7CitCRVhQT1JUIHZvaWQgcmVtb3ZlUHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOworCitCSU5MSU5F
IGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CisgICAgY2FzZSBK
U1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFsdWUiOworICAgIH0KKyAgICBCQ1JBU0goKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQklOTElORSB2b2lkKiYgYmFzZVB0cihLaW5kIGtp
bmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAgICAg
IHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKKyAgICBjYXNlIEpTVmFsdWU6Cisg
ICAgICAgIHJldHVybiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CisgICAgfQorICAgIEJDUkFT
SCgpOworICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK30KIAotLy8gVGhp
cyB3aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhlIEdpZ2Fj
YWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KLUJFWFBPUlQgdm9pZCBhZGREaXNhYmxlQ2FsbGJh
Y2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Ci1CRVhQT1JUIHZvaWQgcmVtb3ZlRGlzYWJsZUNh
bGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K3ZvaWQgZm9yRWFjaEtpbmQoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmdW5jKFByaW1pdGl2
ZSk7CisgICAgZnVuYyhKU1ZhbHVlKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQqIGNh
Z2VkKFQqIHB0cikKK0JJTkxJTkUgVCogY2FnZWQoS2luZCBraW5kLCBUKiBwdHIpCiB7CiAgICAg
QkFTU0VSVChwdHIpOwotICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGdfZ2lnYWNhZ2VCYXNl
UHRyOworICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHIoa2luZCk7CiAgICAgaWYg
KCFnaWdhY2FnZUJhc2VQdHIpCiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KApAQCAtNjgsOSArMTA2LDkgQEAgVCogY2FnZWQoVCogcHRyKQogICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJiBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KEdJR0FDQUdFX01BU0spKSk7CiB9CiAKLWlubGluZSBib29sIGlzQ2FnZWQoY29u
c3Qgdm9pZCogcHRyKQorQklOTElORSBib29sIGlzQ2FnZWQoS2luZCBraW5kLCBjb25zdCB2b2lk
KiBwdHIpCiB7Ci0gICAgcmV0dXJuIGNhZ2VkKHB0cikgPT0gcHRyOworICAgIHJldHVybiBjYWdl
ZChraW5kLCBwdHIpID09IHB0cjsKIH0KIAogQkVYUE9SVCBib29sIHNob3VsZEJlRW5hYmxlZCgp
OwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4
IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIKICAgICAgICAgR2ln
YWNhZ2U6OmVuc3VyZUdpZ2FjYWdlKCk7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAgICBp
ZiAodXNpbmdHaWdhY2FnZSgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQoZ19naWdh
Y2FnZUJhc2VQdHIpOwotICAgICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoZ19n
aWdhY2FnZUJhc2VQdHIsIEdJR0FDQUdFX1NJWkUsIDApKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QkFTU0VSVChnaWdhY2FnZUJhc2VQdHIoKSk7CisgICAgICAgICAgICBtX2xhcmdlRnJlZS5hZGQo
TGFyZ2VSYW5nZShnaWdhY2FnZUJhc2VQdHIoKSwgR0lHQUNBR0VfU0laRSwgMCkpOwogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9CkBAIC03MCw3ICs3MCwxMiBAQCBIZWFwOjpIZWFwKEhlYXBLaW5k
IGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fa2luZCA9PSBIZWFwS2luZDo6R2lnYWNhZ2UgJiYgZ19naWdhY2FnZUJhc2VQ
dHI7CisgICAgcmV0dXJuIGlzR2lnYWNhZ2UobV9raW5kKSAmJiBnaWdhY2FnZUJhc2VQdHIoKTsK
K30KKwordm9pZCogSGVhcDo6Z2lnYWNhZ2VCYXNlUHRyKCkKK3sKKyAgICByZXR1cm4gR2lnYWNh
Z2U6OmJhc2VQdHIoZ2lnYWNhZ2VLaW5kKG1fa2luZCkpOwogfQogCiB2b2lkIEhlYXA6OmluaXRp
YWxpemVMaW5lTWV0YWRhdGEoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDIy
MDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgfkhlYXAoKSA9IGRlbGV0ZTsKICAgICAKICAg
ICBib29sIHVzaW5nR2lnYWNhZ2UoKTsKKyAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsgLy8g
TWF5IGNyYXNoIGlmICF1c2luZ0dpZ2FjYWdlKCkuCiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXpl
TGluZU1ldGFkYXRhKCk7CiAgICAgdm9pZCBpbml0aWFsaXplUGFnZU1ldGFkYXRhKCk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSw1
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRlICJC
SW5saW5lLmgiCisjaW5jbHVkZSAiR2lnYWNhZ2UuaCIKKwogbmFtZXNwYWNlIGJtYWxsb2Mgewog
CiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsKICAgICBQcmltYXJ5LAotICAgIEdpZ2FjYWdlCisgICAg
UHJpbWl0aXZlR2lnYWNhZ2UsCisgICAgSlNWYWx1ZUdpZ2FjYWdlCiB9OwogCi1zdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bUhlYXBzID0gMjsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bnVtSGVhcHMgPSAzOworCitCSU5MSU5FIGJvb2wgaXNHaWdhY2FnZShIZWFwS2luZCBoZWFwS2lu
ZCkKK3sKKyAgICBzd2l0Y2ggKGhlYXBLaW5kKSB7CisgICAgY2FzZSBIZWFwS2luZDo6UHJpbWFy
eToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdp
Z2FjYWdlOgorICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
QklOTElORSBHaWdhY2FnZTo6S2luZCBnaWdhY2FnZUtpbmQoSGVhcEtpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAgICBC
Q1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CisgICAgY2FzZSBI
ZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6UHJp
bWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAgcmV0
dXJuIEdpZ2FjYWdlOjpKU1ZhbHVlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1cm4g
R2lnYWNhZ2U6OlByaW1pdGl2ZTsKK30KKworQklOTElORSBIZWFwS2luZCBoZWFwS2luZChHaWdh
Y2FnZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2lnYWNh
Z2U6OlByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2Fn
ZTsKKyAgICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgorICAgICAgICByZXR1cm4gSGVhcEtpbmQ6
OkpTVmFsdWVHaWdhY2FnZTsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEhlYXBL
aW5kOjpQcmltYXJ5OworfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9JbmxpbmUuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9JbmxpbmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbmxpbmVfaAotI2Rl
ZmluZSBJbmxpbmVfaAotCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s
aW5lKSkgaW5saW5lCi0KLSNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5l
KSkKLQotI2VuZGlmIC8vIElubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTWFwX2gKICNkZWZpbmUgTWFwX2gKIAotI2luY2x1
ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5oIgog
I2luY2x1ZGUgIlZlY3Rvci5oIgogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclBy
b2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3Mu
aAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGVyUHJvY2Vzc19o
CiAjZGVmaW5lIFBlclByb2Nlc3NfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAi
QklubGluZS5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiU3RhdGljTXV0ZXguaCIK
ICNpbmNsdWRlIDxtdXRleD4KQEAgLTcxLDEzICs3MSwxMyBAQCBwcml2YXRlOgogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRGYXN0Q2FzZSgp
CitCSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1cm4g
c19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQorQklOTElORSBUKiBQ
ZXJQcm9jZXNzPFQ+OjpnZXQoKQogewogICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7CiAg
ICAgaWYgKCFvYmplY3QpCkBAIC04Niw3ICs4Niw3IEBAIElOTElORSBUKiBQZXJQcm9jZXNzPFQ+
OjpnZXQoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIFQqIFBlclByb2Nl
c3M8VD46OmdldFNsb3dDYXNlKCkKK0JOT19JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0U2xv
d0Nhc2UoKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhzX211dGV4
KTsKICAgICBpZiAoIXNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSkpIHsK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsOCBAQAogI2lmbmRlZiBQZXJUaHJlYWRfaAogI2RlZmluZSBQZXJUaHJlYWRfaAogCisj
aW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgIklu
bGluZS5oIgogI2luY2x1ZGUgIlBlckhlYXBLaW5kLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0ZS5o
IgogI2luY2x1ZGUgPG11dGV4PgpAQCAtMTE1LDcgKzExNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0ZDo6b25jZV9mbGFnIFBlclQKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
SU5MSU5FIFQqIFBlclRocmVhZDxUPjo6Z2V0RmFzdENhc2UoKQorQklOTElORSBUKiBQZXJUaHJl
YWQ8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KFBlclRo
cmVhZFN0b3JhZ2U8VD46OmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBWZWN0b3JfaAogI2RlZmluZSBW
ZWN0b3JfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2lu
Y2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGNzdHJp
bmc+CkBAIC0xMTksNyArMTE5LDcgQEAgaW5saW5lIFQmIFZlY3RvcjxUPjo6b3BlcmF0b3JbXShz
aXplX3QgaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIHZvaWQgVmVjdG9yPFQ+
OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQorQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChjb25z
dCBUJiB2YWx1ZSkKIHsKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCiAgICAgICAgIGdy
b3dDYXBhY2l0eSgpOwpAQCAtMjEyLDE0ICsyMTIsMTQgQEAgdm9pZCBWZWN0b3I8VD46OnJlYWxs
b2NhdGVCdWZmZXIoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5F
IHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSgpCitCTk9fSU5MSU5FIHZvaWQgVmVjdG9y
PFQ+OjpzaHJpbmtDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4KGlu
aXRpYWxDYXBhY2l0eSgpLCBtX2NhcGFjaXR5IC8gc2hyaW5rRmFjdG9yKTsKICAgICByZWFsbG9j
YXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lO
TElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5KCkKK0JOT19JTkxJTkUgdm9pZCBWZWN0
b3I8VD46Omdyb3dDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4KGlu
aXRpYWxDYXBhY2l0eSgpLCBtX3NpemUgKiBncm93RmFjdG9yKTsKICAgICByZWFsbG9jYXRlQnVm
ZmVyKG5ld0NhcGFjaXR5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317373</attachid>
            <date>2017-08-06 11:43:51 -0700</date>
            <delta_ts>2017-08-06 12:09:50 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74623</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw5ICszODAyLDkgQEAg
aW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBib29sIGlzVwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitzdGF0aWMgdm9p
ZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewotICAgIGRhdGFMb2coIkdpZ2Fj
YWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOworICAgIGRhdGFMb2coIlByaW1pdGl2ZSBnaWdh
Y2FnZSBkaXNhYmxlZCEgQWJvcnRpbmcuXG4iKTsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKIH0KIApAQCAtMzgyNyw3ICszODI3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOwogI2VuZGlmCiAg
ICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQoKSkKLSAgICAgICAgR2lnYWNhZ2U6OmFk
ZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKKyAgICAgICAgR2ln
YWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2Fi
bGVkLCBudWxscHRyKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0gcnVuSlNDKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsK
IAogICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZv
cihuZXdTaXplKTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKIAogICAgICAg
ICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ss
IHRoaXMgY2FzZSB3b3VsZCBzdWNrIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2Jq
ZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAgICAgCiAg
ICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
bV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpKSB7CisgICAgICAg
IGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUiwgc2NyYXRjaDJH
UFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKQEAgLTc4NjgsNyArNzg2OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6
ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yKHNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlU3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOwogCiAgICAgaWYg
KCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKQEAgLTc5MTMsNyArNzkxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBv
dXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNp
dGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAg
ICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZVNwYWNlLmFsbG9jYXRvckZvcihuZXdT
aXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC04NDk0LDcgKzg0OTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICBtX2ppdC5lbWl0
QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5h
dXhpbGlhcnlTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwKKyAgICAgICAgc3RvcmFnZUdQ
UiwgbV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNhZ2VTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwKICAgICAgICAgc2NyYXRjaEdQUjIsIHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2l6ZUdQUik7CkBAIC0xMDExMiw3ICsxMDExMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmYKICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gxKTsKICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksIHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZCgKLSAgICAgICAgc3RvcmFnZVJlc3VsdEdQUiwgbV9qaXQudm0oKS0+YXV4
aWxpYXJ5U3BhY2UsIHNjcmF0Y2gyLCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNsb3dDYXNlcyk7Cisg
ICAgICAgIHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZVNwYWNl
LCBzY3JhdGNoMiwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOwogICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VSZXN1bHRH
UFIpOwogCiAgICAgbV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVzdWx0R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0MCw3ICs1MDQwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0
cl90Pig3KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ5dGVTaXpl
LCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9y
U2l6ZSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UsIGJ5dGVTaXplLCBzbG93Q2FzZSk7CiAg
ICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBz
bG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwbGF0V29yZHMoCkBAIC05MDQ5
LDcgKzkwNDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmludFB0clplcm8pOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlh
cnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAorICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0b3JGb3JTaXplKHZtKCkuanNWYWx1ZUdpZ2FjYWdlU3BhY2UsIGJ1dHRlcmZseVNpemUs
IHNsb3dQYXRoKSwKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwogCiAgICAgICAgICAg
ICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKQEAgLTEwMDA1LDcg
KzEwMDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogCiAgICAgICAgIHNpemVfdCBzaXpl
SW5CeXRlcyA9IHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihz
aXplSW5CeXRlcyk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5q
c1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0ZXMpOwogICAgICAgICBM
VmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRl
cmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdElu
dFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFn
ZSkpOwpAQCAtMTEyMzMsNyArMTEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgYnV0
dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291dC5j
b25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlhcnlTcGFj
ZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZVNwYWNlLCBidXR0ZXJmbHlTaXpl
LCBmYWlsQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwoYWxsb2NhdG9yLCBmYWlsQ2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgTFZhbHVl
IGJ1dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIo
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwpAQCAtMTE2MTQsMzQgKzExNjE0LDM1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGNhZ2VkKExWYWx1ZSBwdHIp
CisgICAgTFZhbHVlIGNhZ2VkKEtpbmQga2luZCwgTFZhbHVlIHB0cikKICAgICB7Ci0gICAgICAg
IGlmICh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtKCkuZ2lnYWNhZ2VFbmFibGVkKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYmFzZVB0ciA9IG1fb3V0LmNvbnN0
SW50UHRyKGdfZ2lnYWNhZ2VCYXNlUHRyKTsKLSAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gbV9v
dXQuY29uc3RJbnRQdHIoR0lHQUNBR0VfTUFTSyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgQjMgbWVzc2luZyB1cCB0aGUgYml0QW5k
LiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4Y2VsbGVudAotICAgICAgICAgICAgLy8gY29k
ZWdlbiBmb3IgMi1vcGVyYW5kIGFuZHEgb24geDg2LTY0LgotICAgICAgICAgICAgTFZhbHVlIG1h
c2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBCdXQgQjMgd2lsbCBjdXJyZW50bHkgbWVzcyB1cCB0aGUgY29kZSBnZW5lcmF0aW9uIG9m
IHRoaXMgYWRkLiBCYXNpY2FsbHksIGFueSBvZmZzZXQgZnJvbSB3aGF0IHdlCi0gICAgICAgICAg
ICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lhdGVkIGFuZCBmb2xkZWQgd2l0aCBn
X2dpZ2FjYWdlQmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGluIHdoaWNoCi0gICAgICAgICAgICAv
LyBtb3ZlQ29uc3RhbnRzKCkgb2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0byByZWFzc29jaWF0ZSBp
biBvcmRlciB0byBob2lzdCB0aGUgYmlnIGNvbnN0YW50cy4gQnV0Ci0gICAgICAgICAgICAvLyBp
dCdzIG11Y2ggZWFzaWVyIHRvIGp1c3QgYmxvY2sgQjMncyBiYWRuZXNzIGhlcmUuIFRoYXQncyB3
aGF0IHdlIGRvIGZvciBub3cuCi0gICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAgICAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2VQdHIpOwotICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKG1hc2tlZCk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgW10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0u
Z3ByKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgICAgIHJldHVybiBwYXRjaHBvaW50Owor
ICAgICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKSB7CisgICAgICAgICAgICBp
ZiAodm0oKS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtKCkucHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBwdHI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBwdHI7CisgICAg
ICAgIExWYWx1ZSBiYXNlUHRyID0gbV9vdXQuY29uc3RJbnRQdHIoR2lnYWNhZ2U6OmJhc2VQdHIo
a2luZCkpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LmNvbnN0SW50UHRyKEdJR0FDQUdF
X01BU0spOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91
dCBCMyBtZXNzaW5nIHVwIHRoZSBiaXRBbmQuIEFsc28sIHdlIHdhbnQgdG8gZ2V0IEIzJ3MgZXhj
ZWxsZW50CisgICAgICAgIC8vIGNvZGVnZW4gZm9yIDItb3BlcmFuZCBhbmRxIG9uIHg4Ni02NC4K
KyAgICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOworICAgICAg
ICAKKyAgICAgICAgLy8gQnV0IEIzIHdpbGwgY3VycmVudGx5IG1lc3MgdXAgdGhlIGNvZGUgZ2Vu
ZXJhdGlvbiBvZiB0aGlzIGFkZC4gQmFzaWNhbGx5LCBhbnkgb2Zmc2V0IGZyb20gd2hhdCB3ZQor
ICAgICAgICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lhdGVkIGFuZCBmb2xkZWQg
d2l0aCBHaWdhY2FnZTo6YmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGluIHdoaWNoCisgICAgICAg
IC8vIG1vdmVDb25zdGFudHMoKSBvYnNlcnZlcyB0aGF0IGl0IG5lZWRzIHRvIHJlYXNzb2NpYXRl
IGluIG9yZGVyIHRvIGhvaXN0IHRoZSBiaWcgY29uc3RhbnRzLiBCdXQKKyAgICAgICAgLy8gaXQn
cyBtdWNoIGVhc2llciB0byBqdXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBoZXJlLiBUaGF0J3Mgd2hh
dCB3ZSBkbyBmb3Igbm93LgorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIoYmFzZVB0cik7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVS
ZWdpc3RlcihtYXNrZWQpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAg
ICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBy
ZXR1cm4gcGF0Y2hwb2ludDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBidWlsZFN3aXRjaChTd2l0
Y2hEYXRhKiBkYXRhLCBMVHlwZSB0eXBlLCBMVmFsdWUgc3dpdGNoVmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1GYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IqIHJlc3VsdDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VGbGFnLAotICAgICAgICBbXSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBuZXcgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsK
LSAgICAgICAgfSk7Ci0gICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KIEZhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCiB7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0YW5jZSgpOwotCisgICAgRmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICB+RmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKTsKICAgICAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnko
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwogICAgIHZvaWQgZnJlZUFs
aWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMjQgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNsdWRlIDxtdXRleD4KLSNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KLQogbmFtZXNwYWNlIEpTQyB7CiAKLUdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciYgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0
YW5jZSgpCi17Ci0gICAgc3RhdGljIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogcmVz
dWx0OwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxf
b25jZSgKLSAgICAgICAgb25jZUZsYWcsCi0gICAgICAgIFtdIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IG5ldyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKLSAgICAgICAgfSk7Ci0g
ICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KLUdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKK0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdpZ2FjYWdlOjpLaW5kIGtp
bmQpCisgICAgOiBtX2tpbmQoa2luZCkKIHsKIH0KIApAQCAtNTMsMTcgKzM5LDE3IEBAIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fkdpZ2FjYWcKIAogdm9pZCogR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKG1fa2luZCwgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCBHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqIGJhc2VQdHIpCiB7Ci0gICAg
R2lnYWNhZ2U6OmFsaWduZWRGcmVlKGJhc2VQdHIpOworICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJl
ZShtX2tpbmQsIGJhc2VQdHIpOwogfQogCiB2b2lkIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiR2ln
YWNhZ2UiKTsKKyAgICBvdXQucHJpbnQoR2lnYWNhZ2U6Om5hbWUobV9raW5kKSwgIkdpZ2FjYWdl
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTMg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgor
I2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgewogcHVibGljOgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIHNpbmdsZXRv
bi4gVGhlcmUgc2hvdWxkIGJlIGRpZmZlcmVudCBpbnN0YW5jZXMgZm9yIHByaW1hcmllcywgSlNW
YWx1ZXMsCi0gICAgLy8gYW5kIG90aGVyIHRoaW5ncy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5Ci0gICAgc3RhdGljIEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCk7CiAgICAgfkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpOwogICAgIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CkBAIC00NCw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKyAgICBHaWdhY2Fn
ZTo6S2luZCBtX2tpbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzc2LDEwICszNzYsMTAgQEAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICBlbmQpCiBlbmQKIAotbWFj
cm8gbG9hZENhZ2VkKHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKK21hY3JvIGxvYWRDYWdlZChiYXNl
UHRyLCBzb3VyY2UsIGRlc3QsIHNjcmF0Y2gpCiAgICAgbG9hZHAgc291cmNlLCBkZXN0CiAgICAg
aWYgR0lHQUNBR0VfRU5BQkxFRCBhbmQgbm90IENfTE9PUAotICAgICAgICBsb2FkcCBfZ19naWdh
Y2FnZUJhc2VQdHIsIHNjcmF0Y2gKKyAgICAgICAgbG9hZHAgYmFzZVB0ciwgc2NyYXRjaAogICAg
ICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgY29uc3RleHByIEdJR0FDQUdF
X01BU0ssIGRlc3QKICAgICAgICAgYWRkcCBzY3JhdGNoLCBkZXN0CkBAIC0xMjA5LDcgKzEyMDks
NyBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAg
IGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGlu
ZQotICAgIGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0s
IG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNh
Z2VCYXNlUHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVj
dEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4
aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJl
YWR5CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCBlbmQKIAogbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUs
IHNjcmF0Y2gpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9m
ZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmpl
Y3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgc2NyYXRjaCkKKyAgICBsb2FkQ2FnZWQo
X2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFu
ZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCBzY3JhdGNoKQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0
QXNJbnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBfbGxpbnRfb3BfZ2V0
X2FycmF5X2xlbmd0aDoKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNs
b3cKICAgICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRDYWdlZChKU09iamVj
dDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdh
Y2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MikKICAgICBsb2Fk
aSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJs
aWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5vcEdldEFycmF5TGVuZ3RoU2xvdwog
ICAgIG9ycSB0YWdUeXBlTnVtYmVyLCB0MApAQCAtMTQ4MSw3ICsxNDgxLDcgQEAgX2xsaW50X29w
X2dldF9ieV92YWw6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQzKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGky
cSB0MSwgdDEKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMsIHQ1
KQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDBdLCB0MywgdDUpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBlTWFzaywgdDIKICAg
ICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAub3BHZXRCeVZhbElzQ29udGlndW91cwogICAgIGJpbmVx
IHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwpAQCAtMTUyOCw3
ICsxNTI4LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgYmlhIHQyLCBMYXN0QXJyYXlU
eXBlIC0gRmlyc3RBcnJheVR5cGUsIC5vcEdldEJ5VmFsU2xvdwogICAgIAogICAgICMgU3dlZXQs
IG5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIHR5cGVkIGFycmF5LiBEbyBzb21lIGJhc2ljIHRo
aW5ncyBub3cuCi0gICAgbG9hZENhZ2VkKEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0s
IHQzLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2dfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyLCBKU0Fy
cmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDUpCiAgICAgYmlhZXEgdDEsIEpTQXJy
YXlCdWZmZXJWaWV3OjptX2xlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdwogICAgIAogICAgICMg
Tm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzLiBOb3RlIHRoYXQgd2UgY2FuIHRy
ZWF0IFVpbnQ4QXJyYXlUeXBlIGFuZApAQCAtMTYxOSw3ICsxNjE5LDcgQEAgbWFjcm8gcHV0QnlW
YWwoc2xvd1BhdGgpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKICAgICBzeGky
cSB0MywgdDMKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAsIHQ1
KQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDFdLCB0MCwgdDUpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBlTWFzaywgdDIKICAg
ICBiaW5lcSB0MiwgSW50MzJTaGFwZSwgLm9wUHV0QnlWYWxOb3RJbnQzMgogICAgIGNvbnRpZ3Vv
dXNQdXRCeVZhbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwq
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAg
c2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCog
YmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGJhc2Ug
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0ZShzaXplKTsKICAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnRy
eUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVy
JiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewog
ICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZv
aWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShzaXplKTsKKyAgICB2b2lk
KiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUoc2l6ZSk7CiAgICAg
aWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKQEAgLTE0
OCw3ICsxNDgsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAg
ICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90
IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFk
ZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9
IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VT
cGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBh
IG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcg
KzEwMSw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NhbGxlZSk7CiAKICAgICBpZiAodGhpc09iamVj
dC0+bV9tYXBwZWRBcmd1bWVudHMpCi0gICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlz
T2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7CisgICAgICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKS5nZXQoKSk7CiAgICAg
R2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxs
LCB2aXNpdG9yKTsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
OjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90
b1ZhbHVlc0Z1bmN0aW9uKCksIERvbnRFbnVtKTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3Rv
cmUgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkp
OworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlU3BhY2UobV9tYXBwZWRBcmd1
bWVudHMua2luZCkudHJ5QWxsb2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKICAgICBSRUxF
QVNFX0FTU0VSVChiYWNraW5nU3RvcmUpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19j
YXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwg
dGhpcywgb3ZlcnJpZGVzKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50
czo6b3ZlcnJpZGVUaGluZ3NJZk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVu
dChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nh
cnkodm0pOwotICAgIG1fbWFwcGVkQXJndW1lbnRzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAg
bV9tYXBwZWRBcmd1bWVudHMuZ2V0KCkuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdm9pZCBE
aXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHNPZmZz
ZXQuaCIKICNpbmNsdWRlICJHZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2Vk
UHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0ZToK
ICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9s
ZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMg
YW5kIG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAg
dWludDMyX3QgbV9taW5DYXBhY2l0eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0
ZXJtaW5lcyB0aGUgY2FwYWNpdHkgb2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFs
IGNhcGFjaXR5LCBvciBtYXliZSBzb21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlz
IHdheSB0byBiZSBraW5kIHRvIHRoZSBKSVRzLgotICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+
IG1fbWFwcGVkQXJndW1lbnRzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgs
IGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCisg
ICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPj4g
bV9tYXBwZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwg
Y2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlIDx3dGYvQ2FnZWRQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYwLDcgKzYx
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwg
VmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKICAgICAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJvb2wqPiBtX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvcjsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIGJvb2w+PiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjAz
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHZvaWQgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6dmlzaXRDaGlsZHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yKQotICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09i
amVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KCkpOworICAgICAgICB2aXNp
dG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0
b3IuZ2V0KCkuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtMjYxLDcg
KzI2MSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWUKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOwogCiAgICAgaWYg
KGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uYXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgp
KTsKKyAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VTcGFjZShtX21vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS50cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5n
U3RvcmUpOwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJv
b2wqPihiYWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRv
ci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnNldE1vZGlmaWVkCiB7CiAgICAgaW5pdE1vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNzYXJ5KHZtLCBsZW5ndGgpOwogICAgIGlmIChp
bmRleCA8IGxlbmd0aCkKLSAgICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0
KClbaW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iu
Z2V0KCkuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
QEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZp
ZWRBCiAgICAgaWYgKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmIChpbmRleCA8IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpLmdldCgpW2luZGV4XTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSA8d3RmL0NhZ2VkUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xODgsNyArMTg5
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVy
OjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSB2bS5hdXhp
bGlhcnlTcGFjZS50cnlBbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHZvaWQqIGRh
dGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7
CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjU1LDcgKzY1
Niw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1f
aGVhZDsKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1fdGFpbDsKLSAgICBB
dXhpbGlhcnlCYXJyaWVyPEhhc2hNYXBCdWZmZXJUeXBlKj4gbV9idWZmZXI7CisgICAgQXV4aWxp
YXJ5QmFycmllcjxDYWdlZFB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwgSGFzaE1hcEJ1ZmZlclR5cGU+
PiBtX2J1ZmZlcjsKICAgICB1aW50MzJfdCBtX2tleUNvdW50OwogICAgIHVpbnQzMl90IG1fZGVs
ZXRlQ291bnQ7CiAgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAg
ICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmF1
eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdl
U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTk4LDcgKzk4LDcgQEAgSlNBcnJheSogSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1
cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3Bh
Y2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRl
eEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFj
ZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4
Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rv
ckxlbmd0aCkpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjAsNyArMzYwLDcgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWRO
ZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9
IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICBuZXdBbGxv
Y0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKICAg
ICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjMx
LDcgKzIzMSw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBp
bml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRy
eUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3Jh
Z2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKG51bGxw
dHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZp
c2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAg
ICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYg
KHNpemUpIHsKLSAgICAgICAgICAgIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0
ZShudWxscHRyLCBzaXplKTsKKyAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2Fn
ZVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIHNpemUpOwogICAgICAgICAgICAgaWYgKCF0ZW1w
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIC8vIE5v
dGU6IGV2ZXJ5dGhpbmcgYmVsb3cgbXVzdCBjb21lIGFmdGVyIGFkZEN1cnJlbnRUaHJlYWQoKS4K
ICAgICBtX3ZtLT50cmFwcygpLm5vdGlmeUdyYWJBbGxMb2NrcygpOwogICAgIAotICAgIG1fdm0t
PmZpcmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgpOworICAgIG1fdm0tPmZpcmVQcmltaXRp
dmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQogICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCBw
cml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IHByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmVJ
RCwgU3RydWN0dXJlKik7CiAKIHByb3RlY3RlZDoKLSAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2Vk
UHRyPEJ1dHRlcmZseT4+IG1fYnV0dGVyZmx5OworICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQ
dHI8R2lnYWNhZ2U6OkpTVmFsdWUsIEJ1dHRlcmZseT4+IG1fYnV0dGVyZmx5OwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGluZzsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5o
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBBTFdBWVNf
SU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0
ZVVuaW5pdGlhbGl6ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShz
dHJ1Y3R1cmUpOwotICAgIHZvaWQqIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0
ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50cnlBbGxv
Y2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOwogICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTUgKzE2NSwxOSBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3J1bkxv
b3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogI2VuZGlmIC8vIFVTRShDRikKICAgICAsIGhlYXAo
dGhpcywgaGVhcFR5cGUpCi0gICAgLCBhdXhpbGlhcnlTcGFjZSgiQXV4aWxpYXJ5IiwgaGVhcCwg
QWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4
aWxpYXJ5KSwgJkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAg
ICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90
TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgJkZhc3RNYWxsb2NBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJE
ZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3Ry
dWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjppbnN0YW5jZSgpKQotICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgJkZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgZGVzdHJ1
Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgJkZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgZWFnZXJseVN3ZXB0
RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNEZXN0cnVjdGlibGVPYmpl
Y3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkp
Ci0gICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKCkpCisgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCisgICAgLCBwcmltaXRpdmVHaWdhY2Fn
ZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Io
c3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdl
OjpKU1ZhbHVlKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlU3BhY2UoIlByaW1pdGl2ZUdpZ2Fj
YWdlIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisg
ICAgLCBqc1ZhbHVlR2lnYWNhZ2VTcGFjZSgiSlNWYWx1ZUdpZ2FjYWdlIiwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5
KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQorICAgICwgY2VsbFNwYWNlKCJKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZGVzdHJ1
Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0Fs
bG9jYXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsIGZhc3RN
YWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNE
ZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAg
ICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNE
ZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAg
ICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6
Omluc3RhbmNlKCkpCisgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogI2Vu
ZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQpAQCAtMjExLDcg
KzIxNSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAs
IG1fY29kZUNhY2hlKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUNhY2hlPigpKQogICAgICwgbV9idWls
dGluRXhlY3V0YWJsZXMoc3RkOjptYWtlX3VuaXF1ZTxCdWlsdGluRXhlY3V0YWJsZXM+KCp0aGlz
KSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50KDApCi0gICAgLCBtX2dpZ2FjYWdl
RW5hYmxlZChJc1dhdGNoZWQpCisgICAgLCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZChJc1dh
dGNoZWQpCiAgICAgLCBtX2NvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkQ291bnQoMCkKICAgICAs
IG1fc2hhZG93Q2hpY2tlbihzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0NoaWNrZW4+KCkpCiB7CkBA
IC0yOTAsNyArMjk0LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIGluaXRpYWxpemVIb3N0Q2FsbFJldHVyblZhbHVlKCk7IC8vIFRoaXMgaXMgbmVlZGVk
IHRvIGNvbnZpbmNlIHRoZSBsaW5rZXIgbm90IHRvIGRyb3AgaG9zdCBjYWxsIHJldHVybiBzdXBw
b3J0LgogI2VuZGlmCiAgICAgCi0gICAgR2lnYWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayhnaWdh
Y2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOworICAgIEdpZ2FjYWdlOjphZGRQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsK
IAogICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgCkBAIC0zNTQsNyArMzU4
LDcgQEAgVk06On5WTSgpCiB7CiAgICAgYXV0byBkZXN0cnVjdGlvbkxvY2tlciA9IGhvbGRMb2Nr
KHNfZGVzdHJ1Y3Rpb25Mb2NrLnJlYWQoKSk7CiAgICAgCi0gICAgR2lnYWNhZ2U6OnJlbW92ZURp
c2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOworICAgIEdpZ2Fj
YWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNh
YmxlZENhbGxiYWNrLCB0aGlzKTsKICAgICBwcm9taXNlRGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5p
bmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoV2FzbTo6ZXhpc3Rp
bmdXb3JrbGlzdE9yTnVsbCgpKQpAQCAtNDIzLDIxICs0MjcsMjEgQEAgVk06On5WTSgpCiAjZW5k
aWYKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqIGFyZ3VtZW50
KQordm9pZCBWTTo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqIGFyZ3Vt
ZW50KQogewotICAgIHN0YXRpY19jYXN0PFZNKj4oYXJndW1lbnQpLT5naWdhY2FnZURpc2FibGVk
KCk7CisgICAgc3RhdGljX2Nhc3Q8Vk0qPihhcmd1bWVudCktPnByaW1pdGl2ZUdpZ2FjYWdlRGlz
YWJsZWQoKTsKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VEaXNhYmxlZCgpCit2b2lkIFZNOjpwcmlt
aXRpdmVHaWdhY2FnZURpc2FibGVkKCkKIHsKICAgICBpZiAobV9hcGlMb2NrLT5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKSB7Ci0gICAgICAgIG1fZ2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwo
KnRoaXMsICJHaWdhY2FnZSBkaXNhYmxlZCIpOworICAgICAgICBtX3ByaW1pdGl2ZUdpZ2FjYWdl
RW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiUHJpbWl0aXZlIGdpZ2FjYWdlIGRpc2FibGVkIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgCiAgICAgLy8gVGhpcyBpcyB0b3RhbGx5IHJhY3ksIGFu
ZCB0aGF0J3MgT0suIFRoZSBwb2ludCBpcywgaXQncyB1cCB0byB0aGUgdXNlciB0byBlbnN1cmUg
dGhhdCB0aGV5IHBhc3MgdGhlCiAgICAgLy8gdW5jYWdlZCBidWZmZXIgaW4gYSBuaWNlbHkgc3lu
Y2hyb25pemVkIG1hbm5lci4KLSAgICBtX25lZWRUb0ZpcmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVl
OworICAgIG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCA9IHRydWU7CiB9CiAK
IHZvaWQgVk06OnNldExhc3RTdGFja1RvcCh2b2lkKiBsYXN0U3RhY2tUb3ApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAK
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtOTUsNiArOTYsOCBAQCBjbGFzcyBET01BdHRyaWJ1
dGVHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247CiBjbGFz
cyBFeGNlcHRpb25TY29wZTsKK2NsYXNzIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OworY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogY2xhc3MgSGFuZGxlU3Rh
Y2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CkBAIC0yODUs
NyArMjg4LDMwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgSGVhcCBoZWFwOwogICAgIAotICAg
IFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGYXN0TWFsbG9j
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9mYXN0TWFsbG9jQWxsb2NhdG9yOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1fcHJpbWl0aXZlR2ln
YWNhZ2VBbGxvY2F0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4gbV9qc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3I7CisgICAgCisgICAgU3Vic3Bh
Y2UgcHJpbWl0aXZlR2lnYWNhZ2VTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2
ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VTcGFjZTsg
Ly8gQnV0dGVyZmxpZXMsIGFycmF5cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCisKKyAgICAv
LyBXZSBtYWtlIGNyb3NzLWN1dHRpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlzIGJl
aW5nIGluIHRoZSBwcmltaXRpdmUgR2lnYWNhZ2UgYW5kIGJ1dHRlcmZsaWVzCisgICAgLy8gYmVp
bmcgaW4gdGhlIEpTVmFsdWUgZ2lnYWNhZ2UuIEZvciBzb21lIHR5cGVzLCBpdCdzIHN1cGVyIG9i
dmlvdXMgd2hlcmUgdGhleSBzaG91bGQgZ28sIGFuZCBzbyB3ZQorICAgIC8vIGNhbiBoYXJkY29k
ZSB0aGF0IGZhY3QuIEJ1dCBzb21ldGltZXMgaXQncyBub3QgY2xlYXIsIHNvIHdlIGFic3RyYWN0
IGl0IGJ5IGhhdmluZyBhIEdpZ2FjYWdlOjpLaW5kCisgICAgLy8gY29uc3RhbnQgc29tZXdoZXJl
LgorICAgIC8vIEZJWE1FOiBNYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgZXZlcnlvbmUgYWJz
dHJhY3RlZCB0aGlzPworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzUyNDgKKyAgICBBTFdBWVNfSU5MSU5FIFN1YnNwYWNlJiBnaWdhY2FnZVNwYWNlKEdp
Z2FjYWdlOjpLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAg
ICAgY2FzZSBHaWdhY2FnZTo6UHJpbWl0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZUdpZ2FjYWdlU3BhY2U7CisgICAgICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CisgICAgICAg
ICAgICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlU3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUdpZ2Fj
YWdlU3BhY2U7CisgICAgfQogICAgIAogICAgIC8vIFdoZW5ldmVyIHBvc3NpYmxlLCB1c2Ugc3Vi
c3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9mIHRoZXNlIHN1YnNwYWNlcy4KICAg
ICBTdWJzcGFjZSBjZWxsU3BhY2U7CkBAIC01MjQsMTEgKzU1MCwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCogbGFzdFN0YWNrVG9wKCkgeyByZXR1cm4gbV9sYXN0U3RhY2tUb3A7IH0KICAgICB2b2lk
IHNldExhc3RTdGFja1RvcCh2b2lkKik7CiAgICAgCi0gICAgdm9pZCBmaXJlR2lnYWNhZ2VFbmFi
bGVkSWZOZWNlc3NhcnkoKQorICAgIHZvaWQgZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZElm
TmVjZXNzYXJ5KCkKICAgICB7Ci0gICAgICAgIGlmIChtX25lZWRUb0ZpcmVHaWdhY2FnZUVuYWJs
ZWQpIHsKLSAgICAgICAgICAgIG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgbV9naWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIkdpZ2FjYWdlIGRp
c2FibGVkIGFzeW5jaHJvbm91c2x5Iik7CisgICAgICAgIGlmIChtX25lZWRUb0ZpcmVQcmltaXRp
dmVHaWdhY2FnZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdp
Z2FjYWdlRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9wcmltaXRpdmVHaWdhY2FnZUVu
YWJsZWQuZmlyZUFsbCgqdGhpcywgIlByaW1pdGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCBhc3luY2hy
b25vdXNseSIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MzMsNyArNjU5LDcgQEAgcHVibGlj
OgogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQgZ290IG1lcmdlZCB3aXRo
IElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRJbXB1cmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmKTsKICAgICAKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBnaWdhY2Fn
ZUVuYWJsZWQoKSB7IHJldHVybiBtX2dpZ2FjYWdlRW5hYmxlZDsgfQorICAgIElubGluZVdhdGNo
cG9pbnRTZXQmIHByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fcHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkOyB9CiAKICAgICBCdWlsdGluRXhlY3V0YWJsZXMqIGJ1aWx0aW5FeGVj
dXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1dGFibGVzLmdldCgpOyB9CiAKQEAgLTc0
MSw4ICs3NjcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQodW5zaWduZWQgZGVwdGgsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24mKTsKICNl
bmRpZgogICAgIAotICAgIHN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lk
Kik7Ci0gICAgdm9pZCBnaWdhY2FnZURpc2FibGVkKCk7CisgICAgc3RhdGljIHZvaWQgcHJpbWl0
aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKKyAgICB2b2lkIHByaW1pdGl2ZUdp
Z2FjYWdlRGlzYWJsZWQoKTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgYm9vbCBtX2Nh
blVzZUFzc2VtYmxlcjsKQEAgLTc4Nyw4ICs4MTMsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9nOwogICAgIHVuc2lnbmVkIG1fdHlw
ZVByb2ZpbGVyRW5hYmxlZENvdW50OwotICAgIGJvb2wgbV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fZ2lnYWNhZ2VFbmFibGVk
OworICAgIGJvb2wgbV9uZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkIHsgZmFsc2Ug
fTsKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwog
ICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1By
b2ZpbGVyOwogICAgIHVuc2lnbmVkIG1fY29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRDb3VudDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ2FnZWRQdHIuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dURi93dGYvQ2Fn
ZWRQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksMTEgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBwYXNz
ZWRLaW5kLCB0eXBlbmFtZSBUPgogY2xhc3MgQ2FnZWRQdHIgewogcHVibGljOgorICAgIHN0YXRp
YyBjb25zdGV4cHIgR2lnYWNhZ2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CisgICAgCiAgICAg
Q2FnZWRQdHIoVCogcHRyID0gbnVsbHB0cikKICAgICAgICAgOiBtX3B0cihwdHIpCiAgICAgewpA
QCAtNDAsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQobV9wdHIp
OworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKICAgICB9CiAg
ICAgCiAgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKQEAgLTY3LDYgKzY5LDkgQEAgcHVibGlj
OgogICAgIAogICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQogICAg
IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBj
b25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KICAgICAKIHByaXZhdGU6CiAgICAgVCogbV9w
dHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9HaWdhY2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY29uc3Qg
dm9pZCogZ19naWdhY2FnZUJhc2VQdHI7CiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKLXZvaWQq
IHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qgc2l6
ZSkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RNYWxsb2Moc2l6ZSk7CiAgICAgdm9pZCog
cmVhbFJlc3VsdDsKQEAgLTQ3LDEyICs0NywxMiBAQCB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNp
emUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBh
Z2VzKHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6
ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQo
c2l6ZSk7CiB9CiAKLXZvaWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qg
c2l6ZSkKK3ZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3Qg
c2l6ZSkKIHsKICAgICBPU0FsbG9jYXRvcjo6cmVsZWFzZURlY29tbWl0dGVkKGJhc2VQdHIsIHNp
emUpOwogfQpAQCAtNjcsNDIgKzY3LDUxIEBAIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAvLyBhbmQg
c3RheSBzY3JhbWJsZWQgZXhjZXB0IGp1c3QgYmVmb3JlIHVzZS4KIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMzUKIAotdm9pZCogdHJ5QWxpZ25lZE1hbGxv
YyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsaWduZWRNYWxsb2Mo
S2luZCBraW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiBy
ZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgYm1hbGxv
Yzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6
OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwog
ICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
YWxpZ25lZEZyZWUodm9pZCogcCkKK3ZvaWQgYWxpZ25lZEZyZWUoS2luZCBraW5kLCB2b2lkKiBw
KQogewotICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNh
Z2UpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKGlz
Q2FnZWQoa2luZCwgcCkpOworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpoZWFw
S2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRyeU1h
bGxvYyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeU1hbGxvYyhLaW5kIGtpbmQsIHNpemVfdCBzaXpl
KQogewotICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUsIGJt
YWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6
YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6
Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgZnJlZSh2b2lk
KiBwKQordm9pZCBmcmVlKEtpbmQga2luZCwgdm9pZCogcCkKIHsKLSAgICBibWFsbG9jOjphcGk6
OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisgICAg
ICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIHApKTsKKyAgICBi
bWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6
Y29tcGlsZXJGZW5jZSgpOwogfQogCi12b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXpl
X3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQga2luZCwgc2l6ZV90
IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlMYXJnZU1lbWFs
aWduVmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdh
Y2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlMYXJnZU1lbWFsaWdu
VmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsK
ICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90KQordm9pZCBmcmVlVmlydHVh
bFBhZ2VzKEtpbmQga2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90KQogewotICAgIGJtYWxsb2M6
OmFwaTo6ZnJlZUxhcmdlVmlydHVhbChiYXNlUHRyLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNh
Z2UpOworICAgIGlmICghYmFzZVB0cikKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNT
RVJUKGlzQ2FnZWQoa2luZCwgYmFzZVB0cikpOworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZUxhcmdl
VmlydHVhbChiYXNlUHRyLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21w
aWxlckZlbmNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDQ3
IEBAIGV4dGVybiBXVEZfRVhQT1JUREFUQSBjb25zdCB2b2lkKiBnX2dpZ2EKIAogbmFtZXNwYWNl
IEdpZ2FjYWdlIHsKIAorZW51bSBLaW5kIHsKKyAgICBQcmltaXRpdmUsCisgICAgSlNWYWx1ZQor
fTsKKwogaW5saW5lIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKSB7IH0KLWlubGluZSB2b2lkIGRpc2Fi
bGVHaWdhY2FnZSgpIHsgfQoraW5saW5lIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkg
eyB9CiBpbmxpbmUgYm9vbCBzaG91bGRCZUVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQogCi1p
bmxpbmUgdm9pZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikgeyB9
Ci1pbmxpbmUgdm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lk
KikgeyB9CitpbmxpbmUgdm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKiko
dm9pZCopLCB2b2lkKikgeyB9CitpbmxpbmUgdm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2Fs
bGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikgeyB9CisKK0FMV0FZU19JTkxJTkUgY29uc3Qg
Y2hhciogbmFtZShLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQ
cmltaXRpdmU6CisgICAgICAgIHJldHVybiAiUHJpbWl0aXZlIjsKKyAgICBjYXNlIEpTVmFsdWU6
CisgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZComIGJhc2VQdHIoS2luZCkKK3sKKyAgICByZXR1cm4gZ19naWdhY2FnZUJhc2VQdHI7Cit9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY2FnZWQoVCogcHRyKSB7IHJldHVybiBw
dHI7IH0KK2lubGluZSBUKiBjYWdlZChLaW5kLCBUKiBwdHIpIHsgcmV0dXJuIHB0cjsgfQogCi1p
bmxpbmUgYm9vbCBpc0NhZ2VkKGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5l
IGJvb2wgaXNDYWdlZChLaW5kLCBjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KIAotaW5s
aW5lIHZvaWQqIHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
IHsgcmV0dXJuIHRyeUZhc3RBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0KLWlubGlu
ZSB2b2lkIGFsaWduZWRGcmVlKHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKTsKLWlubGluZSB2b2lk
IGZyZWUodm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQoraW5saW5lIHZvaWQqIHRyeUFsaWduZWRN
YWxsb2MoS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIHRyeUZh
c3RBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0KK2lubGluZSB2b2lkIGFsaWduZWRG
cmVlKEtpbmQsIHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9CitXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKTsKK2lubGluZSB2b2lkIGZy
ZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQogCi1XVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwg
c2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhL
aW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2Fj
YWdlCiAjZWxzZQpAQCAtNjMsMTMgKzg1LDEzIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZy
ZWVWaXJ0dWFsUGFnZXMKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAotV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQqIHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
OwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUodm9pZCopOwotV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhzaXplX3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZnJlZSh2b2lkKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxpZ25lZE1hbGxv
YyhLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhbGlnbmVkRnJlZShLaW5kLCB2b2lkKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVl
KEtpbmQsIHZvaWQqKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmly
dHVhbFBhZ2VzKHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0
dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVfdCBzaXplKTsKK1dURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwg
c2l6ZV90IHNpemUpOwogCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNw
cAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAg
ICA6IG1fYnVpbHRpbkZ1bmN0aW9ucyh2bSkKICAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKLSAg
ICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENv
bnN0cmFpbnQiLCB2bS5oZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKCkpCi0gICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2Vi
Q29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgJkZhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQorICAgICwgbV9vdXRwdXRD
b25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZt
LmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2dsb2JhbE9iamVj
dE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBD
b25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKIHsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24g
MjIwMzIzKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgbm9uVmlz
aWJsZVByb2Nlc3NDbAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIHZvaWQgZ2lnYWNh
Z2VEaXNhYmxlZCh2b2lkKikKK3N0YXRpYyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQo
dm9pZCopCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC0yMDMsNyAr
MjAzLDcgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAgICAgfSk7CiAKICAgICBpZiAoR2ln
YWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgpKQotICAgICAgICBHaWdhY2FnZTo6YWRkRGlzYWJsZUNh
bGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWQsIG51bGxwdHIpOworICAgICAgICBHaWdhY2FnZTo6YWRk
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQsIG51bGxw
dHIpOwogfQogCiBXZWJQcm9jZXNzOjp+V2ViUHJvY2VzcygpCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjAz
MjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKIAkJMTRERDc4QzYxOEY0OEQ3NTAwOTUw
NzAyIC8qIEFzeW5jVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxN0Y2NTIxOEJBODhBMDAwNzZGQTNGIC8qIEFzeW5jVGFzay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEM3MThGNDhE
NzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEM4MThG
NDhENzUwMDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElu
bGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyog
QklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0REQ3OENBMThGNDhENzUwMDk1MDcwMiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8q
IE11dGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTRERDc4Q0IxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclByb2Nlc3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDQ2QTA3MTdBNjFGQTQwMEY5RUEx
RCAvKiBQZXJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTRERDc4Q0MxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclRocmVhZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RkQxN0E2MUYx
RjAwRjlFQTFEIC8qIFBlclRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05NCw3ICs5NCw3IEBACiAJCTE0MEZBMDAyMTlDRTQyOUMwMEZG
RDNDOCAvKiBCdW1wUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnVt
cFJhbmdlLmg7IHBhdGggPSBibWFsbG9jL0J1bXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpbmVNZXRhZGF0YS5oOyBwYXRoID0gYm1h
bGxvYy9MaW5lTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMDVF
ODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gT2JqZWN0VHlwZS5jcHA7IHBhdGggPSBibWFsbG9jL09iamVjdFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDEzRTQ2MDE4OURDRTFFMDA1
NDZENjggLyogSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElubGlu
ZS5oOyBwYXRoID0gYm1hbGxvYy9JbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQklubGluZS5oOyBwYXRoID0gYm1hbGxvYy9CSW5saW5lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBC
dW1wQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7
IG5hbWUgPSBCdW1wQWxsb2NhdG9yLmg7IHBhdGggPSBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8q
IEJBc3NlcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQkFzc2VydC5oOyBw
YXRoID0gYm1hbGxvYy9CQXNzZXJ0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3LDEwICsyODcsMTAgQEAKIAkJCQk2NTk5QzVDQjFF
QzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmggKi8sCiAJCQkJMTQxM0U0NjgxODlF
RURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLywKIAkJCQkwRjVCRjE3MjFGMjNDNTcxMDAyOUQ5
MUQgLyogQkV4cG9ydC5oICovLAorCQkJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBCSW5s
aW5lLmggKi8sCiAJCQkJMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oICov
LAogCQkJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5oICovLAogCQkJ
CTBGNUJGMTQ2MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5oICovLAotCQkJCTE0MTNFNDYw
MTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLywKIAkJCQkxNDFEOUFGRjFDOEU1MUMwMDAw
QUJCQTAgLyogTGlzdC5oICovLAogCQkJCTQ0MjZFMjdFMUM4MzhFRTAwMDhFQjA0MiAvKiBMb2dn
aW5nLmNwcCAqLywKIAkJCQk0NDI2RTI3RjFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oICov
LApAQCAtMzUzLDcgKzM1Myw3IEBACiAJCQkJMTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZp
eGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0OTE4Rjg5QzEzMDAxMTVDOTcg
LyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QkYxNDkxRjIyQThEODAwMjlEOTFEIC8q
IFBlckhlYXBLaW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3
MDIgLyogSW5saW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3
MDIgLyogQklubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0QzA3RjUxQzdCNzAyNjAwNTFC
QjZBIC8qIExhcmdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEM4OTkyRDFDQzU3ODMzMDAy
N0EwNTcgLyogTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRkEwMDUxOUNFNEI2
ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIEFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgIH0KIH0KIAotTk9fSU5MSU5FIHZv
aWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1wQWxsb2NhdG9yJiBhbGxv
Y2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCitCTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZp
bGxBbGxvY2F0b3JTbG93Q2FzZShCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXpl
Q2xhc3MpCiB7CiAgICAgQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9idW1wUmFu
Z2VDYWNoZXNbc2l6ZUNsYXNzXTsKIApAQCAtMTU4LDcgKzE1OCw3IEBAIE5PX0lOTElORSB2b2lk
IEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG8KICAgICBtX2hlYXAuYWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXMobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlLCBtX2RlYWxs
b2NhdG9yLmxpbmVDYWNoZShsb2NrKSk7CiB9CiAKLUlOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVm
aWxsQWxsb2NhdG9yKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykK
K0JJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCiB7CiAgICAgQnVtcFJhbmdlQ2FjaGUmIGJ1bXBS
YW5nZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKICAgICBpZiAoIWJ1bXBS
YW5nZUNhY2hlLnNpemUoKSkKQEAgLTE2NiwxMyArMTY2LDEzIEBAIElOTElORSB2b2lkIEFsbG9j
YXRvcjo6cmVmaWxsQWxsb2NhdG9yKEIKICAgICByZXR1cm4gYWxsb2NhdG9yLnJlZmlsbChidW1w
UmFuZ2VDYWNoZS5wb3AoKSk7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9j
YXRlTGFyZ2Uoc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2Nh
dGVMYXJnZShzaXplX3Qgc2l6ZSkKIHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
IGxvY2soSGVhcDo6bXV0ZXgoKSk7CiAgICAgcmV0dXJuIG1faGVhcC5hbGxvY2F0ZUxhcmdlKGxv
Y2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFs
bG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBBbGxvY2F0
b3I6OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBzaXpl
Q2xhc3MgPSBibWFsbG9jOjpzaXplQ2xhc3Moc2l6ZSk7CiAgICAgQnVtcEFsbG9jYXRvciYgYWxs
b2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdOwpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Bc3luY1Rhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FzeW5jVGFzay5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FzeW5jVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l
IEFzeW5jVGFza19oCiAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVkZSAiSW5saW5lLmgi
CisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiU2l6
ZXMuaCIKICNpbmNsdWRlIDxhdG9taWM+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJ
bmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAko
cmV2aXNpb24gMjIwMzIzKQkoZnJvbSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oOjIy
MDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBJbmxpbmVfaAorI2RlZmluZSBJbmxpbmVfaAorCisjZGVmaW5lIElO
TElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5saW5lCisKKyNkZWZpbmUgTk9f
SU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKworI2VuZGlmIC8vIElubGluZV9oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywx
MSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbmxpbmVfaAotI2RlZmluZSBJ
bmxpbmVfaAorI2lmbmRlZiBCSW5saW5lX2gKKyNkZWZpbmUgQklubGluZV9oCiAKLSNkZWZpbmUg
SU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKKyNkZWZpbmUgQklO
TElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5saW5lCiAKLSNkZWZpbmUgTk9f
SU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZpbmUgQk5PX0lOTElORSBfX2F0
dHJpYnV0ZV9fKChub2lubGluZSkpCiAKLSNlbmRpZiAvLyBJbmxpbmVfaAorI2VuZGlmIC8vIEJJ
bmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJKHJldmlzaW9uIDIyMDMyMykK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw5ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW5jbHVkZSAiQklubGluZS5o
IgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIklubGlu
ZS5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewpAQCAt
NDYsMjcgKzQ2LDI3IEBAIENhY2hlOjpDYWNoZShIZWFwS2luZCBoZWFwS2luZCkKIHsKIH0KIAot
Tk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBL
aW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFs
bG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQog
ewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2Uo
KS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKHNpemUpOwogfQogCi1OT19J
TkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVh
cEtpbmQsIHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93
Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCiB7CiAgICAgcmV0
dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFw
S2luZCkuYWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBD
YWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjphbGxvY2F0
ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46
OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShhbGlnbm1l
bnQsIHNpemUpOwogfQogCi1OT19JTkxJTkUgdm9pZCBDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNl
TnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmplY3QpCitCTk9fSU5MSU5FIHZv
aWQgQ2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwg
dm9pZCogb2JqZWN0KQogewogICAgIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRT
bG93Q2FzZSgpLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3IoKS5kZWFsbG9jYXRlKG9iamVjdCk7
CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorQk5PX0lO
TElORSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhl
YXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewogICAgIHJldHVybiBQZXJU
aHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFs
bG9jYXRvcigpLnJlYWxsb2NhdGUob2JqZWN0LCBuZXdTaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEg
KzI0LDExIEBACiAgKi8KIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRlICJCSW5saW5l
LmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJEZWFsbG9jYXRvci5oIgogI2luY2x1
ZGUgIkRlYnVnSGVhcC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIK
ICNpbmNsdWRlICJPYmplY3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5jcHAJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAKIC8vIEZJWE1FOiBBc2sgZHlsZCB0byBwdXQgdGhp
cyBpbiBpdHMgb3duIHBhZ2UsIGFuZCBtcHJvdGVjdCB0aGUgcGFnZSBhZnRlciB3ZSBlbnN1cmUg
dGhlIGdpZ2FjYWdlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDk3Mgotdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7Cit2b2lkKiBnX3ByaW1pdGl2ZUdpZ2Fj
YWdlQmFzZVB0cjsKK3ZvaWQqIGdfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0cjsKIAogdXNpbmcgbmFt
ZXNwYWNlIGJtYWxsb2M7CiAKQEAgLTUzLDggKzU0LDggQEAgc3RydWN0IENhbGxiYWNrIHsKICAg
ICB2b2lkKiBhcmd1bWVudCB7IG51bGxwdHIgfTsKIH07CiAKLXN0cnVjdCBDYWxsYmFja3Mgewot
ICAgIENhbGxiYWNrcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyB9CitzdHJ1Y3Qg
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyB7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
cyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyB9CiAgICAgCiAgICAgVmVjdG9yPENh
bGxiYWNrPiBjYWxsYmFja3M7CiB9OwpAQCAtNjksNTIgKzcwLDU3IEBAIHZvaWQgZW5zdXJlR2ln
YWNhZ2UoKQogICAgICAgICAgICAgaWYgKCFzaG91bGRCZUVuYWJsZWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQqIGJhc2VQdHIgPSB0
cnlWTUFsbG9jYXRlKEdJR0FDQUdFX1NJWkUsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5X
QVkpOwotICAgICAgICAgICAgaWYgKCFiYXNlUHRyKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcyhiYXNl
UHRyLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgZ19naWdhY2FnZUJhc2VQdHIgPSBiYXNlUHRyOworICAgICAgICAgICAgZm9yRWFj
aEtpbmQoCisgICAgICAgICAgICAgICAgWyZdIChLaW5kIGtpbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFJhbmRvbWl6ZSB3aGVyZSB0aGlzIGdvZXMuCisgICAgICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNDUK
KyAgICAgICAgICAgICAgICAgICAgYmFzZVB0cihraW5kKSA9IHRyeVZNQWxsb2NhdGUoR0lHQUNB
R0VfU0laRSwgR0lHQUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldBWSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghYmFzZVB0cihraW5kKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJGQVRBTDogQ291bGQgbm90IGFsbG9jYXRlICVzIGdpZ2FjYWdlLlxuIiwg
bmFtZShraW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBCQ1JBU0goKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
dm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcyhiYXNlUHRyKGtpbmQpLCBHSUdBQ0FHRV9TSVpFICsg
R0lHQUNBR0VfUlVOV0FZKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAjZW5k
aWYgLy8gR0lHQUNBR0VfRU5BQkxFRAogfQogCi12b2lkIGRpc2FibGVHaWdhY2FnZSgpCit2b2lk
IGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpCiB7CiAgICAgZW5zdXJlR2lnYWNhZ2UoKTsKLSAg
ICBpZiAoIWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CisgICAgaWYgKCFnX3ByaW1pdGl2ZUdpZ2FjYWdl
QmFzZVB0cikgewogICAgICAgICAvLyBJdCB3YXMgbmV2ZXIgZW5hYmxlZC4gVGhhdCBtZWFucyB0
aGF0IHdlIG5ldmVyIGV2ZW4gc2F2ZWQgYW55IGNhbGxiYWNrcy4gT3IsIHdlIGhhZCBhbHJlYWR5
IGRpc2FibGVkCiAgICAgICAgIC8vIGl0IGJlZm9yZSwgYW5kIGFscmVhZHkgY2FsbGVkIHRoZSBj
YWxsYmFja3MuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQ2FsbGJhY2tzJiBj
YWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7
CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8
U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6
bXV0ZXgoKSk7CiAgICAgZm9yIChDYWxsYmFjayYgY2FsbGJhY2sgOiBjYWxsYmFja3MuY2FsbGJh
Y2tzKQogICAgICAgICBjYWxsYmFjay5mdW5jdGlvbihjYWxsYmFjay5hcmd1bWVudCk7CiAgICAg
Y2FsbGJhY2tzLmNhbGxiYWNrcy5zaHJpbmsoMCk7Ci0gICAgZ19naWdhY2FnZUJhc2VQdHIgPSBu
dWxscHRyOworICAgIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyID0gbnVsbHB0cjsKIH0KIAot
dm9pZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFy
Z3VtZW50KQordm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9u
KSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQogewogICAgIGVuc3VyZUdpZ2FjYWdlKCk7Ci0gICAg
aWYgKCFnX2dpZ2FjYWdlQmFzZVB0cikgeworICAgIGlmICghZ19wcmltaXRpdmVHaWdhY2FnZUJh
c2VQdHIpIHsKICAgICAgICAgLy8gSXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgb3Igd2Ugd2VyZSBu
ZXZlciBhYmxlIHRvIGVuYWJsZSBpdC4KICAgICAgICAgZnVuY3Rpb24oYXJndW1lbnQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIENhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBl
clByb2Nlc3M8Q2FsbGJhY2tzPjo6Z2V0KCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNN
dXRleD4gbG9jayhQZXJQcm9jZXNzPENhbGxiYWNrcz46Om11dGV4KCkpOworICAgIFByaW1pdGl2
ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2Fi
bGVDYWxsYmFja3M+OjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBs
b2NrKFBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOwogICAg
IGNhbGxiYWNrcy5jYWxsYmFja3MucHVzaChDYWxsYmFjayhmdW5jdGlvbiwgYXJndW1lbnQpKTsK
IH0KIAotdm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiks
IHZvaWQqIGFyZ3VtZW50KQordm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9p
ZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQogewotICAgIENhbGxiYWNrcyYg
Y2FsbGJhY2tzID0gKlBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6Z2V0KCk7Ci0gICAgc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPENhbGxiYWNrcz46Om11dGV4KCkp
OworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNz
PFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46
Om11dGV4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmNhbGxiYWNr
cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5mdW5j
dGlvbiA9PSBmdW5jdGlvbgogICAgICAgICAgICAgJiYgY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5h
cmd1bWVudCA9PSBhcmd1bWVudCkgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdh
Y2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAko
cmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCiAj
aW5jbHVkZSAiQkV4cG9ydC5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJCUGxh
dGZvcm0uaCIKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCkBAIC00NCwyMyArNDUsNjAgQEAKICNk
ZWZpbmUgR0lHQUNBR0VfRU5BQkxFRCAwCiAjZW5kaWYKIAotZXh0ZXJuICJDIiBCRVhQT1JUIHZv
aWQqIGdfZ2lnYWNhZ2VCYXNlUHRyOworZXh0ZXJuICJDIiBCRVhQT1JUIHZvaWQqIGdfcHJpbWl0
aXZlR2lnYWNhZ2VCYXNlUHRyOworZXh0ZXJuICJDIiBCRVhQT1JUIHZvaWQqIGdfanNWYWx1ZUdp
Z2FjYWdlQmFzZVB0cjsKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAorZW51bSBLaW5kIHsKKyAg
ICBQcmltaXRpdmUsCisgICAgSlNWYWx1ZQorfTsKKwogQkVYUE9SVCB2b2lkIGVuc3VyZUdpZ2Fj
YWdlKCk7CiAKLUJFWFBPUlQgdm9pZCBkaXNhYmxlR2lnYWNhZ2UoKTsKK0JFWFBPUlQgdm9pZCBk
aXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKTsKKworLy8gVGhpcyB3aWxsIGNhbGwgdGhlIGRpc2Fi
bGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhlIFByaW1pdGl2ZSBHaWdhY2FnZSBpcyBjdXJy
ZW50bHkgZGlzYWJsZWQuCitCRVhQT1JUIHZvaWQgYWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
KHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOworQkVYUE9SVCB2b2lkIHJlbW92ZVByaW1pdGl2ZURp
c2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKKworQklOTElORSBjb25zdCBj
aGFyKiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFBy
aW1pdGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOworICAgIGNhc2UgSlNWYWx1ZToK
KyAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0JJTkxJTkUgdm9pZComIGJhc2VQdHIoS2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4g
Z19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICBy
ZXR1cm4gZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAg
ICByZXR1cm4gZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7Cit9CiAKLS8vIFRoaXMgd2lsbCBj
YWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGlmIHRoZSBHaWdhY2FnZSBpcyBj
dXJyZW50bHkgZGlzYWJsZWQuCi1CRVhQT1JUIHZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQg
KCopKHZvaWQqKSwgdm9pZCopOwotQkVYUE9SVCB2b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2
b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGZv
ckVhY2hLaW5kKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgZnVuYyhQcmltaXRpdmUpOworICAg
IGZ1bmMoSlNWYWx1ZSk7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UKiBjYWdlZChUKiBw
dHIpCitCSU5MSU5FIFQqIGNhZ2VkKEtpbmQga2luZCwgVCogcHRyKQogewogICAgIEJBU1NFUlQo
cHRyKTsKLSAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIgPSBnX2dpZ2FjYWdlQmFzZVB0cjsKKyAg
ICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIgPSBiYXNlUHRyKGtpbmQpOwogICAgIGlmICghZ2lnYWNh
Z2VCYXNlUHRyKQogICAgICAgICByZXR1cm4gcHRyOwogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFQqPigKQEAgLTY4LDkgKzEwNiw5IEBAIFQqIGNhZ2VkKFQqIHB0cikKICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICYgc3RhdGljX2Nhc3Q8dWludHB0cl90
PihHSUdBQ0FHRV9NQVNLKSkpOwogfQogCi1pbmxpbmUgYm9vbCBpc0NhZ2VkKGNvbnN0IHZvaWQq
IHB0cikKK0JJTkxJTkUgYm9vbCBpc0NhZ2VkKEtpbmQga2luZCwgY29uc3Qgdm9pZCogcHRyKQog
ewotICAgIHJldHVybiBjYWdlZChwdHIpID09IHB0cjsKKyAgICByZXR1cm4gY2FnZWQoa2luZCwg
cHRyKSA9PSBwdHI7CiB9CiAKIEJFWFBPUlQgYm9vbCBzaG91bGRCZUVuYWJsZWQoKTsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBIZWFw
OjpIZWFwKEhlYXBLaW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIEdpZ2FjYWdlOjpl
bnN1cmVHaWdhY2FnZSgpOwogI2lmIEdJR0FDQUdFX0VOQUJMRUQKICAgICAgICAgaWYgKHVzaW5n
R2lnYWNhZ2UoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKGdfZ2lnYWNhZ2VCYXNl
UHRyKTsKLSAgICAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGdfZ2lnYWNhZ2VC
YXNlUHRyLCBHSUdBQ0FHRV9TSVpFLCAwKSk7CisgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQo
Z2lnYWNhZ2VCYXNlUHRyKCkpOworICAgICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFu
Z2UoZ2lnYWNhZ2VCYXNlUHRyKCksIEdJR0FDQUdFX1NJWkUsIDApKTsKICAgICAgICAgfQogI2Vu
ZGlmCiAgICAgfQpAQCAtNzAsNyArNzAsMTIgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBz
dGQ6OmxvY2tfZ3VhcgogCiBib29sIEhlYXA6OnVzaW5nR2lnYWNhZ2UoKQogewotICAgIHJldHVy
biBtX2tpbmQgPT0gSGVhcEtpbmQ6OkdpZ2FjYWdlICYmIGdfZ2lnYWNhZ2VCYXNlUHRyOworICAg
IHJldHVybiBpc0dpZ2FjYWdlKG1fa2luZCkgJiYgZ2lnYWNhZ2VCYXNlUHRyKCk7Cit9CisKK3Zv
aWQqIEhlYXA6OmdpZ2FjYWdlQmFzZVB0cigpCit7CisgICAgcmV0dXJuIEdpZ2FjYWdlOjpiYXNl
UHRyKGdpZ2FjYWdlS2luZChtX2tpbmQpKTsKIH0KIAogdm9pZCBIZWFwOjppbml0aWFsaXplTGlu
ZU1ldGFkYXRhKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAyMjAzMjMpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODksNiAr
ODksNyBAQCBwcml2YXRlOgogICAgIH5IZWFwKCkgPSBkZWxldGU7CiAgICAgCiAgICAgYm9vbCB1
c2luZ0dpZ2FjYWdlKCk7CisgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyKCk7IC8vIE1heSBjcmFz
aCBpZiAhdXNpbmdHaWdhY2FnZSgpLgogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRh
ZGF0YSgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpOwpJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcEtpbmQuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsNTkgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCQXNzZXJ0LmgiCisjaW5jbHVkZSAiQklubGluZS5o
IgorI2luY2x1ZGUgIkdpZ2FjYWdlLmgiCisKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogZW51bSBj
bGFzcyBIZWFwS2luZCB7CiAgICAgUHJpbWFyeSwKLSAgICBHaWdhY2FnZQorICAgIFByaW1pdGl2
ZUdpZ2FjYWdlLAorICAgIEpTVmFsdWVHaWdhY2FnZQogfTsKIAotc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBudW1IZWFwcyA9IDI7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUhlYXBz
ID0gMzsKKworQklOTElORSBib29sIGlzR2lnYWNhZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCit7Cisg
ICAgc3dpdGNoIChoZWFwS2luZCkgeworICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1hcnk6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZToK
KyAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0JJTkxJTkUg
R2lnYWNhZ2U6OktpbmQgZ2lnYWNhZ2VLaW5kKEhlYXBLaW5kIGtpbmQpCit7CisgICAgc3dpdGNo
IChraW5kKSB7CisgICAgY2FzZSBIZWFwS2luZDo6UHJpbWFyeToKKyAgICAgICAgQkNSQVNIKCk7
CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6
OlByaW1pdGl2ZUdpZ2FjYWdlOgorICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsK
KyAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiBHaWdh
Y2FnZTo6SlNWYWx1ZTsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEdpZ2FjYWdl
OjpQcmltaXRpdmU7Cit9CisKK0JJTkxJTkUgSGVhcEtpbmQgaGVhcEtpbmQoR2lnYWNhZ2U6Oktp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdpZ2FjYWdlOjpQcmlt
aXRpdmU6CisgICAgICAgIHJldHVybiBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U7CisgICAg
Y2FzZSBHaWdhY2FnZTo6SlNWYWx1ZToKKyAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpKU1ZhbHVl
R2lnYWNhZ2U7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBIZWFwS2luZDo6UHJp
bWFyeTsKK30KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SW5saW5lLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSW5s
aW5lLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSW5saW5lX2gKLSNkZWZpbmUgSW5s
aW5lX2gKLQotI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlu
bGluZQotCi0jZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCi0KLSNl
bmRpZiAvLyBJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAjaWZuZGVmIE1hcF9oCiAjZGVmaW5lIE1hcF9oCiAKLSNpbmNsdWRlICJJbmxp
bmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRl
ICJWZWN0b3IuaCIKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmgJKHJldmlz
aW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFBlclByb2Nlc3NfaAogI2RlZmlu
ZSBQZXJQcm9jZXNzX2gKIAotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUu
aCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgIlN0YXRpY011dGV4LmgiCiAjaW5jbHVk
ZSA8bXV0ZXg+CkBAIC03MSwxMyArNzEsMTMgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0RmFzdENhc2UoKQorQklOTElO
RSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRGYXN0Q2FzZSgpCiB7CiAgICAgcmV0dXJuIHNfb2JqZWN0
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0KCkKK0JJTkxJTkUgVCogUGVyUHJvY2Vz
czxUPjo6Z2V0KCkKIHsKICAgICBUKiBvYmplY3QgPSBnZXRGYXN0Q2FzZSgpOwogICAgIGlmICgh
b2JqZWN0KQpAQCAtODYsNyArODYsNyBAQCBJTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0KCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSBUKiBQZXJQcm9jZXNzPFQ+Ojpn
ZXRTbG93Q2FzZSgpCitCTk9fSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldFNsb3dDYXNlKCkK
IHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soc19tdXRleCk7CiAgICAg
aWYgKCFzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpKSB7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDgg
QEAKICNpZm5kZWYgUGVyVGhyZWFkX2gKICNkZWZpbmUgUGVyVGhyZWFkX2gKIAorI2luY2x1ZGUg
IkJJbmxpbmUuaCIKICNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIK
ICNpbmNsdWRlICJQZXJIZWFwS2luZC5oIgogI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNs
dWRlIDxtdXRleD4KQEAgLTExNSw3ICsxMTUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6
Om9uY2VfZmxhZyBQZXJUCiAjZW5kaWYKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSBU
KiBQZXJUaHJlYWQ8VD46OmdldEZhc3RDYXNlKCkKK0JJTkxJTkUgVCogUGVyVGhyZWFkPFQ+Ojpn
ZXRGYXN0Q2FzZSgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihQZXJUaHJlYWRTdG9y
YWdlPFQ+OjpnZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgVmVjdG9yX2gKICNkZWZpbmUgVmVjdG9yX2gK
IAotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJW
TUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxjc3RyaW5nPgpAQCAt
MTE5LDcgKzExOSw3IEBAIGlubGluZSBUJiBWZWN0b3I8VD46Om9wZXJhdG9yW10oc2l6ZV90IGkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChj
b25zdCBUJiB2YWx1ZSkKK0JJTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3QgVCYgdmFs
dWUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQogICAgICAgICBncm93Q2FwYWNp
dHkoKTsKQEAgLTIxMiwxNCArMjEyLDE0IEBAIHZvaWQgVmVjdG9yPFQ+OjpyZWFsbG9jYXRlQnVm
ZmVyKHNpemVfdCAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSB2b2lkIFZl
Y3RvcjxUPjo6c2hyaW5rQ2FwYWNpdHkoKQorQk5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6c2hy
aW5rQ2FwYWNpdHkoKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChpbml0aWFsQ2Fw
YWNpdHkoKSwgbV9jYXBhY2l0eSAvIHNocmlua0ZhY3Rvcik7CiAgICAgcmVhbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1OT19JTkxJTkUgdm9p
ZCBWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCitCTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpn
cm93Q2FwYWNpdHkoKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG1heChpbml0aWFsQ2Fw
YWNpdHkoKSwgbV9zaXplICogZ3Jvd0ZhY3Rvcik7CiAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdD
YXBhY2l0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317374</attachid>
            <date>2017-08-06 12:09:50 -0700</date>
            <delta_ts>2017-08-06 15:29:14 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>115697</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw5ICszODAyLDkgQEAg
aW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBib29sIGlzVwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitzdGF0aWMgdm9p
ZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewotICAgIGRhdGFMb2coIkdpZ2Fj
YWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOworICAgIGRhdGFMb2coIlByaW1pdGl2ZSBnaWdh
Y2FnZSBkaXNhYmxlZCEgQWJvcnRpbmcuXG4iKTsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKIH0KIApAQCAtMzgyNyw3ICszODI3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOwogI2VuZGlmCiAg
ICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQoKSkKLSAgICAgICAgR2lnYWNhZ2U6OmFk
ZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKKyAgICAgICAgR2ln
YWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2Fi
bGVkLCBudWxscHRyKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0gcnVuSlNDKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsNiArODk4LDcgQEAKIAkJMEZFQzNDNTcxRjMzQTQ1
MzAwRjU5QjZDIC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1NTFGMzNBNDUzMDBG
NTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDM0M1QTFGMzNBNDg5MDBG
NTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzU4MUYzM0E0ODkwMEY1OUI2
QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovOyB9OwogCQkwRkVDM0M1
QjFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1OTFGMzNB
NDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IH07CisJ
CTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzVGMUYzNzlGNTMwMEY1
OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICov
OyB9OwogCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CiAJCTBGRUM4NTAw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QmFzaWNCbG9jay5jcHAgKi87IH07CkBAIC0zNDk2LDYgKzM0OTcsNyBAQAogCQkwRkVDM0M1NTFG
MzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNDNTgxRjMzQTQ4OTAwRjU5QjZDIC8qIEdpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVDM0M1OTFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlCNkMgLyogQ2Fn
ZWRCYXJyaWVyUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkQmFycmllclB0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
QXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
QXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNCYXNp
Y0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NjIyLDYgKzY2MjQsNyBAQAogCQkJCTlFNzI5NDA5MTkwRjAzMDYwMDFB
OTFCNSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVy
Zmx5SW5saW5lcy5oICovLAorCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJh
cnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEu
Y3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLAog
CQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLywKQEAgLTg2
MzksNiArODY0Miw3IEBACiAJCQkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8qIERGR0lubGlu
ZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA2MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg5OEYzMjFCMjc2
ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFj
Y2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChh
bGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgICAg
ICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VT
cGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFsbG9j
YXRvcikgewogICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291bGQgc3Vj
ayEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogICAgIAogICAgIGlmIChzaXplKSB7Ci0gICAg
ICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgeworICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JG
b3Ioc2l6ZSkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0
b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdl
R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAg
ICAgICAgICAgCkBAIC03ODY4LDcgKzc4NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKTsKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2Fn
ZVNwYWNlLmFsbG9jYXRvckZvcihzaXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUt
PnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBA
IC03OTEzLDcgKzc5MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9y
OwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Io
bmV3U2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5q
c1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICBpZiAoIWFs
bG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtODQ5NCw3ICs4NDk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld1R5cGVkQXJyYQogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIofjcp
LCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXpl
ZCgKLSAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsCisgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPnByaW1p
dGl2ZUdpZ2FjYWdlU3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCiAgICAgICAgIHNjcmF0
Y2hHUFIyLCBzbG93Q2FzZXMpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOwpAQCAt
MTAxMTIsNyArMTAxMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCdXR0
ZXJmCiAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMSk7CiAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNo
MSwgc2NyYXRjaDIpOwogICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAg
ICAgIHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLCBzY3JhdGNo
Miwgc2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOworICAgICAgICBzdG9yYWdlUmVzdWx0
R1BSLCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VTcGFjZSwgc2NyYXRjaDIsIHNjcmF0Y2gx
LCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0R1BSKTsKIAogICAgIG1faml0LnN0
b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlc3VsdEdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oNykpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yU2l6ZSh2bSgpLmF1eGlsaWFyeVNwYWNlLCBieXRlU2l6ZSwgc2xvd0Nhc2UpOworICAgICAg
ICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5wcmltaXRpdmVH
aWdhY2FnZVNwYWNlLCBieXRlU2l6ZSwgc2xvd0Nhc2UpOwogICAgICAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd0Nhc2UpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBzcGxhdFdvcmRzKApAQCAtOTA0OSw3ICs5MDQ5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub0J1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcihtX291dC5pbnRQdHJaZXJvKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKAotICAgICAgICAgICAg
ICAgICAgICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ1dHRlcmZseVNp
emUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yRm9yU2l6ZSh2bSgp
LmpzVmFsdWVHaWdhY2FnZVNwYWNlLCBidXR0ZXJmbHlTaXplLCBzbG93UGF0aCksCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0
dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCkBAIC0xMDAwNSw3ICsxMDAwNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVm
b3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gdm0oKS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0ZXMpOworICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlU3BhY2Uu
YWxsb2NhdG9yRm9yKHNpemVJbkJ5dGVzKTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0
aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
CiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExMjMzLDcgKzEx
MjMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5h
ZGQoCiAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ1dHRlcmZseVNpemUsIGZh
aWxDYXNlKTsKKyAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0o
KS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOwogICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFp
bENhc2UpOwogICAgICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5h
ZGQoc3RhcnRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpKTsKQEAgLTExNjE0LDM0ICsxMTYxNCwzNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIExWYWx1ZSBjYWdlZChMVmFsdWUgcHRyKQorICAgIExWYWx1ZSBjYWdlZChL
aW5kIGtpbmQsIExWYWx1ZSBwdHIpCiAgICAgewotICAgICAgICBpZiAodm0oKS5naWdhY2FnZUVu
YWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseSh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBtX291dC5jb25zdEludFB0cihnX2dpZ2FjYWdlQmFz
ZVB0cik7Ci0gICAgICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LmNvbnN0SW50UHRyKEdJR0FD
QUdFX01BU0spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IEIzIG1lc3NpbmcgdXAgdGhlIGJpdEFuZC4gQWxzbywgd2Ugd2FudCB0byBn
ZXQgQjMncyBleGNlbGxlbnQKLSAgICAgICAgICAgIC8vIGNvZGVnZW4gZm9yIDItb3BlcmFuZCBh
bmRxIG9uIHg4Ni02NC4KLSAgICAgICAgICAgIExWYWx1ZSBtYXNrZWQgPSBtX291dC5iaXRBbmQo
cHRyLCBtYXNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQnV0IEIzIHdpbGwgY3Vy
cmVudGx5IG1lc3MgdXAgdGhlIGNvZGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGFkZC4gQmFzaWNhbGx5
LCBhbnkgb2Zmc2V0IGZyb20gd2hhdCB3ZQotICAgICAgICAgICAgLy8gY29tcHV0ZSBoZXJlIHdp
bGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVkIHdpdGggZ19naWdhY2FnZUJhc2VQdHIuIFRo
ZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAotICAgICAgICAgICAgLy8gbW92ZUNvbnN0YW50cygpIG9i
c2VydmVzIHRoYXQgaXQgbmVlZHMgdG8gcmVhc3NvY2lhdGUgaW4gb3JkZXIgdG8gaG9pc3QgdGhl
IGJpZyBjb25zdGFudHMuIEJ1dAotICAgICAgICAgICAgLy8gaXQncyBtdWNoIGVhc2llciB0byBq
dXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBoZXJlLiBUaGF0J3Mgd2hhdCB3ZSBkbyBmb3Igbm93Lgot
ICAgICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2lu
dChwb2ludGVyVHlwZSgpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihiYXNlUHRyKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cihtYXNrZWQpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICAgICAgaWYgKGtpbmQgPT0g
R2lnYWNhZ2U6OlByaW1pdGl2ZSkgeworICAgICAgICAgICAgaWYgKHZtKCkucHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmFkZExhemlseSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBMVmFsdWUgYmFzZVB0ciA9
IG1fb3V0LmNvbnN0SW50UHRyKEdpZ2FjYWdlOjpiYXNlUHRyKGtpbmQpKTsKKyAgICAgICAgTFZh
bHVlIG1hc2sgPSBtX291dC5jb25zdEludFB0cihHSUdBQ0FHRV9NQVNLKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgQjMgbWVzc2luZyB1cCB0aGUg
Yml0QW5kLiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4Y2VsbGVudAorICAgICAgICAvLyBj
b2RlZ2VuIGZvciAyLW9wZXJhbmQgYW5kcSBvbiB4ODYtNjQuCisgICAgICAgIExWYWx1ZSBtYXNr
ZWQgPSBtX291dC5iaXRBbmQocHRyLCBtYXNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJ1dCBC
MyB3aWxsIGN1cnJlbnRseSBtZXNzIHVwIHRoZSBjb2RlIGdlbmVyYXRpb24gb2YgdGhpcyBhZGQu
IEJhc2ljYWxseSwgYW55IG9mZnNldCBmcm9tIHdoYXQgd2UKKyAgICAgICAgLy8gY29tcHV0ZSBo
ZXJlIHdpbGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVkIHdpdGggR2lnYWNhZ2U6OmJhc2VQ
dHIuIFRoZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAorICAgICAgICAvLyBtb3ZlQ29uc3RhbnRzKCkg
b2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0byByZWFzc29jaWF0ZSBpbiBvcmRlciB0byBob2lzdCB0
aGUgYmlnIGNvbnN0YW50cy4gQnV0CisgICAgICAgIC8vIGl0J3MgbXVjaCBlYXNpZXIgdG8ganVz
dCBibG9jayBCMydzIGJhZG5lc3MgaGVyZS4gVGhhdCdzIHdoYXQgd2UgZG8gZm9yIG5vdy4KKyAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChwb2lu
dGVyVHlwZSgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2VQ
dHIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIobWFza2VkKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgW10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRTd2l0Y2goU3dpdGNoRGF0YSogZGF0YSwgTFR5cGUg
dHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3ImIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpCi17
Ci0gICAgc3RhdGljIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiByZXN1bHQ7Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAot
ICAgICAgICBvbmNlRmxhZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3
IEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7Ci0gICAgICAgIH0pOwotICAgIHJl
dHVybiAqcmVzdWx0OwotfQotCiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6RmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQogewogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNyArMzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEZhc3RNYWxsb2NBbGln
bmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewogcHVi
bGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCk7CiAgICAgfkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplKSBvdmVycmlkZTsKICAgICB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBv
dmVycmlkZTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI0ICsyNiwx
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oIgogCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL0dpZ2FjYWdl
Lmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCi1HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3Im
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKQotewotICAgIHN0YXRp
YyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIHJlc3VsdDsKLSAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VG
bGFnLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiAqcmVzdWx0Owot
fQotCi1HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpCitHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIDogbV9raW5kKGtp
bmQpCiB7CiB9CiAKQEAgLTUzLDE3ICszOSwxNyBAQCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6On5HaWdhY2FnCiAKIHZvaWQqIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQog
ewotICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUp
OworICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhtX2tpbmQsIGFsaWdubWVu
dCwgc2l6ZSk7CiB9CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVl
QWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQogewotICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJl
ZShiYXNlUHRyKTsKKyAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUobV9raW5kLCBiYXNlUHRyKTsK
IH0KIAogdm9pZCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIkdpZ2FjYWdlIik7CisgICAgb3V0LnBy
aW50KEdpZ2FjYWdlOjpuYW1lKG1fa2luZCksICJHaWdhY2FnZSIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjAzMjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvR2lnYWNh
Z2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBzaW5nbGV0b24uIFRoZXJlIHNob3VsZCBiZSBk
aWZmZXJlbnQgaW5zdGFuY2VzIGZvciBwcmltYXJpZXMsIEpTVmFsdWVzLAotICAgIC8vIGFuZCBv
dGhlciB0aGluZ3MuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NDkxOQotICAgIHN0YXRpYyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3ImIGlu
c3RhbmNlKCk7Ci0KKyAgICBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoR2lnYWNhZ2U6
OktpbmQpOwogICAgIH5HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICAKICAg
ICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIG92ZXJyaWRlOwpAQCAtNDQsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgR2lnYWNhZ2VB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisgICAgR2lnYWNhZ2U6OktpbmQgbV9raW5kOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjIwMzIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTM3NiwxMCArMzc2LDEwIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIGxvYWRDYWdlZChzb3VyY2Us
IGRlc3QsIHNjcmF0Y2gpCittYWNybyBsb2FkQ2FnZWQoYmFzZVB0ciwgc291cmNlLCBkZXN0LCBz
Y3JhdGNoKQogICAgIGxvYWRwIHNvdXJjZSwgZGVzdAogICAgIGlmIEdJR0FDQUdFX0VOQUJMRUQg
YW5kIG5vdCBDX0xPT1AKLSAgICAgICAgbG9hZHAgX2dfZ2lnYWNhZ2VCYXNlUHRyLCBzY3JhdGNo
CisgICAgICAgIGxvYWRwIGJhc2VQdHIsIHNjcmF0Y2gKICAgICAgICAgYnRweiBzY3JhdGNoLCAu
ZG9uZQogICAgICAgICBhbmRwIGNvbnN0ZXhwciBHSUdBQ0FHRV9NQVNLLCBkZXN0CiAgICAgICAg
IGFkZHAgc2NyYXRjaCwgZGVzdApAQCAtMTIwOSw3ICsxMjA5LDcgQEAgX2xsaW50X29wX2lzX29i
amVjdDoKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNl
dEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0
QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKLSAgICBsb2FkQ2FnZWQoSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCB2
YWx1ZSkKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkK
ICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFz
SW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTIyMiw3ICsxMjIy
LDcgQEAgZW5kCiAKIG1hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5
T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlLCBzY3JhdGNoKQogICAgIGJpbHQg
cHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGluZQotICAg
IGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVj
dEFuZFN0b3JhZ2UsIHNjcmF0Y2gpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdhY2FnZUJh
c2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZSwgc2NyYXRjaCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGky
cSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFk
eQpAQCAtMTI5OCw3ICsxMjk4LDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAg
YnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgYnRpeiB0MiwgSW5k
ZXhpbmdTaGFwZU1hc2ssIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigxLCB0MSkKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwg
dDAsIHQyKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCiAgICAgbG9hZGkgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgdDAKICAg
ICBiaWx0IHQwLCAwLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBvcnEgdGFnVHlwZU51bWJl
ciwgdDAKQEAgLTE0ODEsNyArMTQ4MSw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDEsIHQxCi0gICAgbG9hZENh
Z2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2df
anNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMsIHQ1
KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAgICAgYmllcSB0MiwgSW50MzJTaGFw
ZSwgLm9wR2V0QnlWYWxJc0NvbnRpZ3VvdXMKICAgICBiaW5lcSB0MiwgQ29udGlndW91c1NoYXBl
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKQEAgLTE1MjgsNyArMTUyOCw3IEBAIF9sbGludF9v
cF9nZXRfYnlfdmFsOgogICAgIGJpYSB0MiwgTGFzdEFycmF5VHlwZSAtIEZpcnN0QXJyYXlUeXBl
LCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAjIFN3ZWV0LCBub3cgd2Uga25vdyB0aGF0IHdl
IGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29tZSBiYXNpYyB0aGluZ3Mgbm93LgotICAgIGxvYWRD
YWdlZChKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDUpCisgICAgbG9hZENh
Z2VkKF9nX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0ciwgSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVj
dG9yW3QwXSwgdDMsIHQ1KQogICAgIGJpYWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5n
dGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAjIE5vdyBiaXNlY3QgdGhyb3VnaCB0
aGUgdmFyaW91cyB0eXBlcy4gTm90ZSB0aGF0IHdlIGNhbiB0cmVhdCBVaW50OEFycmF5VHlwZSBh
bmQKQEAgLTE2MTksNyArMTYxOSw3IEBAIG1hY3JvIHB1dEJ5VmFsKHNsb3dQYXRoKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDMsIHQzCi0gICAgbG9hZENh
Z2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2df
anNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAsIHQ1
KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAgICAgYmluZXEgdDIsIEludDMyU2hh
cGUsIC5vcFB1dEJ5VmFsTm90SW50MzIKICAgICBjb250aWd1b3VzUHV0QnlWYWwoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lv
biAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKHVuCiAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG51bUVsZW1lbnRzKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudEJ5dGVTaXplKTsK
ICAgICBpZiAoIXNpemUpCiAgICAgICAgIHNpemUgPSAxOyAvLyBNYWtlIHN1cmUgbWFsbG9jIGFj
dHVhbGx5IGFsbG9jYXRlcyBzb21ldGhpbmcsIGJ1dCBub3QgdG9vIG11Y2guIFdlIHVzZSBudWxs
IHRvIG1lYW4gdGhhdCB0aGUgYnVmZmVyIGlzIG5ldXRlcmVkLgotICAgIG1fZGF0YSA9IEdpZ2Fj
YWdlOjp0cnlNYWxsb2Moc2l6ZSk7CisgICAgbV9kYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhH
aWdhY2FnZTo6UHJpbWl0aXZlLCBzaXplKTsKICAgICBpZiAoIW1fZGF0YSkgewogICAgICAgICBy
ZXNldCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgICAgICBtZW1zZXQobV9kYXRhLCAwLCBz
aXplKTsKIAogICAgIG1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6
ZTsKLSAgICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShwKTsg
fTsKKyAgICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBwKTsgfTsKIH0KIAogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpt
YWtlU2hhcmVkKCkKQEAgLTE4Nyw3ICsxODcsNyBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoQXJyCiAvLyAgIGZyb20gdGhlIGNhZ2UuCiBSZWY8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21CeXRlcyhkYXRhLCBieXRlTGVuZ3RoLCBb
XSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShwKTsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZy
b21CeXRlcyhkYXRhLCBieXRlTGVuZ3RoLCBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShH
aWdhY2FnZTo6UHJpbWl0aXZlLCBwKTsgfSk7CiB9CiAKIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNl
IHRoaXMgZXhjZXB0IGlmIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUgY2FnZS4KQEAgLTE5OCw4
ICsxOTgsOCBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wCiAvLyAt
IFdlYkFzc2VtYmx5LiBXYXNtIHNob3VsZCBhbGxvY2F0ZSBmcm9tIHRoZSBjYWdlLgogUmVmPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1bmN0aW9uJiYgZGVz
dHJ1Y3RvcikKIHsKLSAgICBpZiAoIUdpZ2FjYWdlOjppc0NhZ2VkKGRhdGEpICYmIGRhdGEgJiYg
Ynl0ZUxlbmd0aCkKLSAgICAgICAgR2lnYWNhZ2U6OmRpc2FibGVHaWdhY2FnZSgpOworICAgIGlm
ICghR2lnYWNhZ2U6OmlzQ2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgZGF0YSkgJiYgZGF0YSAm
JiBieXRlTGVuZ3RoKQorICAgICAgICBHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KCk7CiAgICAgCiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZv
aWQqPihkYXRhKSwgYnl0ZUxlbmd0aCwgV1RGTW92ZShkZXN0cnVjdG9yKSk7CiAgICAgcmV0dXJu
IGNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDggQEAgY2xhc3MgVk07CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
Y2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBUIFR5cGU7Cisg
ICAgCiAgICAgQXV4aWxpYXJ5QmFycmllcigpOiBtX3ZhbHVlKCkgeyB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBK
U0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7
CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
dm9pZCogYmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOworICAgIHZvaWQq
IGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS5hbGxvY2F0ZShzaXplKTsKICAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5n
SGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIHZvaWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShzaXplKTsKKyAg
ICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUoc2l6ZSk7
CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
QEAgLTE0OCw3ICsxNDgsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJh
eVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAg
c2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhp
bmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3
U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNl
LnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4n
dCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2Vk
QmFycmllclB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhZ2VkQmFycmllclB0ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ2FnZWRQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBUaGlzIGlzIGEgY29udmVuaWVudCBjb21ibyBv
ZiBBdXhpbGlhcnlCYXJyaWVyIGFuZCBDYWdlZFB0ci4KKwordGVtcGxhdGU8R2lnYWNhZ2U6Oktp
bmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KK2NsYXNzIENhZ2VkQmFycmllclB0ciB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2lu
ZDsKKyAgICB0eXBlZGVmIFQgVHlwZTsKKyAgICAKKyAgICBBdXhpbGlhcnlCYXJyaWVyKCkgeyB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBBdXhpbGlhcnlCYXJyaWVyKFZN
JiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBtX2JhcnJpZXIu
c2V0KHZtLCBjZWxsLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjbGVhcigpIHsgbV9iYXJyaWVyLmNsZWFyKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gZ2V0KCku
Z2V0KCk7IH0KKyAgICBUKiBnZXRNYXlCZU51bGwoKSBjb25zdCB7IHJldHVybiBnZXQoKS5nZXRN
YXlCZU51bGwoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWdlZEJhcnJp
ZXJQdHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgp
ID09IG90aGVyLmdldE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRCYXJy
aWVyUHRyKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9p
ZCBzZXRXaXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJy
aWVyKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAg
IFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlKSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0K
KyAgICAKK3ByaXZhdGU6CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxraW5kLCBUPj4g
bV9iYXJyaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIy
MDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50
czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJv
dG9WYWx1ZXNGdW5jdGlvbigpLCBEb250RW51bSk7CiAgICAgCi0gICAgdm9pZCogYmFja2luZ1N0
b3JlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgp
KTsKKyAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZVNwYWNlKG1fbWFwcGVkQXJn
dW1lbnRzLmtpbmQpLnRyeUFsbG9jYXRlKG1hcHBlZEFyZ3VtZW50c1NpemUoKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoYmFja2luZ1N0b3JlKTsKICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0aWNf
Y2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQodm0s
IHRoaXMsIG92ZXJyaWRlcyk7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVu
dHM6Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1l
bnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBvdmVycmlkZVRoaW5nc0lmTmVjZXNz
YXJ5KHZtKTsKLSAgICBtX21hcHBlZEFyZ3VtZW50cy5nZXQoKVtpbmRleF0gPSB0cnVlOworICAg
IG1fbWFwcGVkQXJndW1lbnRzW2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2
aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDYWdlZEJhcnJp
ZXJQdHIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCIKICNpbmNsdWRlICJH
ZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2VkUHRyLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC03Myw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzTWFw
cGVkQXJndW1lbnQodWludDMyX3QgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwg
bV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3VtZW50cyB8fCAhbV9tYXBwZWRBcmd1bWVudHMuZ2V0
KClbaV0pOworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9tYXBwZWRBcmd1bWVu
dHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzW2ldKTsKICAgICB9CiAKICAgICBib29sIGlzTWFwcGVk
QXJndW1lbnRJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAtMTY0LDcgKzE2NSw3IEBAIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQzMl90
IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1l
bnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5Lgog
ICAgIHVpbnQzMl90IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3Ro
IGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFj
dHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQg
dGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJv
b2wqPiBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVu
Z3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVz
LgorICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21hcHBl
ZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNiAr
MjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhZ2VkQmFycmllclB0ci5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjAsNyArNjEsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwogICAgIAotICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+IG1fbW9kaWZpZWRBcmd1
bWVudHNEZXNjcmlwdG9yOworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZl
LCBib29sPiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpp
bml0TW9kaWZpZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3Jp
cHRvcik7CiAKICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3Rv
cmUgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8OD4oYXJnc0xlbmd0aCkpOworICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdh
Y2FnZVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLnRyeUFsbG9jYXRl
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRz
ID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIG1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVudHMpOwpAQCAt
MjgyLDcgKzI4Miw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6c2V0TW9kaWZpZWQK
IHsKICAgICBpbml0TW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9ySWZOZWNlc3Nhcnkodm0sIGxl
bmd0aCk7CiAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKQotICAgICAgICBtX21vZGlmaWVkQXJndW1l
bnRzRGVzY3JpcHRvci5nZXQoKVtpbmRleF0gPSB0cnVlOworICAgICAgICBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcltpbmRleF0gPSB0cnVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgpAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNN
b2RpZmllZEEKICAgICBpZiAoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKQotICAgICAgICByZXR1cm4g
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KClbaW5kZXhdOworICAgICAgICByZXR1
cm4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JbaW5kZXhdOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3
dGYvQ2FnZWRQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE4OCw3ICsxODksNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9j
YXRpb25TaXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgdm9pZCogZGF0YSA9IHZt
LmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKICAgICAg
ICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywg
c2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NTUsNyArNjU2LDcgQEAg
cHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV9oZWFkOwog
ICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV90YWlsOwotICAgIEF1eGlsaWFy
eUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGUqPiBtX2J1ZmZlcjsKKyAgICBBdXhpbGlhcnlCYXJy
aWVyPENhZ2VkUHRyPEdpZ2FjYWdlOjpKU1ZhbHVlLCBIYXNoTWFwQnVmZmVyVHlwZT4+IG1fYnVm
ZmVyOwogICAgIHVpbnQzMl90IG1fa2V5Q291bnQ7CiAgICAgdWludDMyX3QgbV9kZWxldGVDb3Vu
dDsKICAgICB1aW50MzJfdCBtX2NhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAg
IHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1
Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VTcGFjZS50
cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91
dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArOTgsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFy
cmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5p
dGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlB
bGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywg
b3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0
aCkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5k
ZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3Jh
Z2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uYXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9
IHZtLmpzVmFsdWVHaWdhY2FnZVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgICAgICBp
ZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3
U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwpAQCAtNTUwLDcgKzU1MCw3IEBAIGJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsK
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAg
ICAgICBpZiAoIW5ld0xlbmd0aCkKQEAgLTYyMCw3ICs2MjAsNyBAQCBKU1ZhbHVlIEpTQXJyYXk6
OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTcyMiw3ICs3MjIs
NyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJl
TnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVO
dWxsKCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJy
YXlDbGFzczogewpAQCAtODkwLDkgKzg5MCw5IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGlj
ZShFeGVjU3RhdGUmIGUKIAogICAgICAgICBhdXRvJiByZXN1bHRCdXR0ZXJmbHkgPSAqcmVzdWx0
QXJyYXktPmJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoYXJyYXlUeXBlID09IEFycmF5V2l0aERv
dWJsZSkKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJs
ZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkg
KyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1j
cHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUp
ICogY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVy
Zmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAg
ICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNv
dW50KTsKICAgICAgICAgcmVzdWx0QnV0dGVyZmx5LnNldFB1YmxpY0xlbmd0aChjb3VudCk7CiAK
ICAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpAQCAtOTcwLDcgKzk3MCw3IEBAIGJvb2wgSlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBC
dXR0ZXJmbHkgYW5kIHRoZSBpbmRleCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJl
IGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0
ZXJmbHksIHdoaWNoIG5lZWRzIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5
IGluIHRoZSB1c2VkCiAgICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+c2hpZnQoc3RydWN0dXJl
KCksIGNvdW50KTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+
c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0
ZXJmbHkpOwogICAgICAgICBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CkBAIC0xMDE1LDcgKzEwMTUsNyBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIAog
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0x
MTcxLDcgKzExNzEsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTExOTQsNyArMTE5NCw3IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7Cisg
ICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogCiAgICAgICAg
IC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhp
bmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJv
dWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJh
eVN0b3JhZ2UgbW9kZS4KQEAgLTEyMzgsNyArMTIzOCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAg
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0
aGluZ3MgYXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRo
cm91Z2ggc2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFy
cmF5U3RvcmFnZSBtb2RlLgpAQCAtMTI4MSw3ICsxMjgxLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxs
QXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtMTM1NCw3ICsxMzU0LDcgQEAg
dm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgogICAgIC8vIEZJWE1FOiBX
aGF0IHByZXZlbnRzIHRoaXMgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBhIFJ1bnRpbWVBcnJheT8g
VGhlIGxlbmd0aCBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAg
ICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjIw
MzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNy
ZWF0ZShWTSYgdgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0
aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
b3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5
QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFn
ZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAg
ICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQq
IHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUp
OwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLmF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnBy
aW1pdGl2ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgc2l6ZSk7CiAgICAgICAg
ICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24g
MjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1aXJlTG9j
aygpCiAgICAgLy8gTm90ZTogZXZlcnl0aGluZyBiZWxvdyBtdXN0IGNvbWUgYWZ0ZXIgYWRkQ3Vy
cmVudFRocmVhZCgpLgogICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3JhYkFsbExvY2tzKCk7CiAg
ICAgCi0gICAgbV92bS0+ZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7CisgICAgbV92
bS0+ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7CiAKICNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5n
UHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxs
CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFByb3BlcnR5TmFtZUVkZ2UodGhpc09iamVjdCwg
dG9WYWx1ZS5hc0NlbGwoKSwgZW50cnkua2V5KTsKICAgICB9CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0TWF5
QmVOdWxsKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGRhdGEgPSBudWxscHRyOwogICAgICAgICB1aW50MzJfdCBjb3VudCA9IDA7CkBAIC02
MTMsNyArNjEzLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIApAQCAtODc1LDcgKzg3NSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC04OTcsNyArODk3
LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAK
ICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTc5LDcgKzk3OSw3IEBA
IHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZt
LCBzdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3Jh
Z2UoKSk7CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMTEsNyArMTAxMSw3IEBAIEJ1
dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5n
dGgocHJvcGVydHlDYXBhY2l0eSwgbGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJm
bHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2Fw
YWNpdHksIGZhbHNlLCAwLAorICAgICAgICBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKSwgdm0s
IHRoaXMsIHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCiAgICAgICAgIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKQEAgLTEwOTksNyArMTA5OSw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4
aW5nVHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0
aWVzKG9sZFR5cGUpKTsKIAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJy
YXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBvbGRTdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9y
TGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKSk7CisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMsIG9s
ZFN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldE1heUJlTnVs
bCgpKTsKICAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFy
cmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZs
eSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1dHRlcmZseSk7CkBAIC0xMTE3LDQzICsxMTE3LDQz
IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGUKIHsKICAgICBBU1NF
UlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5
LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIp
KTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOworICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKIENvbnRpZ3VvdXNE
b3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoVk0mIHZtKQogewogICAg
IEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IFBOYU47CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lk
ZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhp
bmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQog
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHNldFN0cnVj
dHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVj
dENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUodm0pOwotICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICAKQEAgLTExNjIsNyArMTE2Miw3IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1j
cHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNp
emUsCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlTaXplLAogICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
ICAgICAKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NF
UlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmVjdG9yTGVuZ3RoOyBpLS07KQpAQCAtMTIwMyw3ICsxMjAzLDcgQEAgQ29udGlndW91c0Rv
dWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogewogICAgIEFTU0VSVChoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTsp
IHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSogY3VycmVudEFzRG91YmxlID0g
Yml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKSk7Ci0gICAg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVl
cyBKU09iamVjdDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKFZNJiB2bSkKQEAgLTEyMjYsNyAr
MTIyNiw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMKICAgICBB
U1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJU
b0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpA
QCAtMTIzNCw5ICsxMjM0LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMy
VG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzSW50MzIo
aW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdl
ID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2
bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAg
ICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwpA
QCAtMTI2MSw3ICsxMjYxLDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0
RG91YgogewogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIGRvdWJsZSogY3Vy
cmVudCA9ICZidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50QXNWYWx1ZSA9IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qPihjdXJyZW50KTsKQEAgLTEyNzYsNyArMTI3Niw3IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKICAgICAKICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVD
b250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7
CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtMTI4NCw5ICsxMjg0LDkgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwog
ICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3Rv
cmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSB7
CkBAIC0xMzE1LDkgKzEzMTUsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250
aWd1b3VzKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3
U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxl
bWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkr
KykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKQEAgLTE0MDgsOCArMTQwOCw4IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZv
clZhbHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQo
Vk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoaW5k
ZXggPCBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCkpOwotICAgIEFTU0VSVChpbmRl
eCA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4
IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1ZSh2
bSwgdmFsdWUpOwogICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKIH0KQEAg
LTE1NzcsNyArMTU3Nyw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3Rv
cmEKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZt
KSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAg
ICAKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTg2Miw3ICsxODYyLDcgQEAg
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpIDwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CkBAIC0yMTY4LDcgKzIxNjgs
NyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0
dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3Rv
cmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKQEAgLTIzMjUs
NyArMjMyNSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHIKIGJv
b2wgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCkBAIC0y
Mzk1LDcgKzIzOTUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHko
CiAgICAgaWYgKGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgKFJlYWRPbmx5IHwgQWNjZXNzb3Ip
KQogICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyh2bSk7CiAKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdl
KCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFT
RV9BU1NFUlQobWFwKTsKICAgICAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIHByb3BlcnR5IG5hbWUgUC4KQEAgLTI0MjcsNyArMjQyNyw3IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1
bHRzKTsKIAogICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBk
ZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIGlmIChpbmRleCA+PSBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5sZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1NTksNyAr
MjU1OSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICBB
U1NFUlQoKGluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IGluZGV4aW5nU2hh
cGUpOwogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKIAotICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICAvLyBGb3IgdXMgdG8g
Z2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVu
Z3RoLCBvciBncmVhdGVyIHRoYW4KICAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0
aC4KQEAgLTI1ODEsNyArMjU4MSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW4KICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKS5nZXQoKTsKKyAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKIAogICAgIFJF
TEVBU0VfQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKQEAgLTI4NjksNyArMjg2OSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSkpOwogICAg
ICAgICB9CkBAIC0yODgzLDcgKzI4ODMsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eFNsb3dPckJleW9uCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1
dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBA
IC0yOTAyLDcgKzI5MDIsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJl
eW9uCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJm
bHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAg
LTI5MTIsNyArMjkxMiw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09yQmV5
b24KIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgp
LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGFycmF5U3RvcmFnZSgpKTsKQEAgLTMwMTUsOCArMzAxNSw4IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGlmIChBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBh
cnJheVN0b3JhZ2VPck51bGwoKSkKICAgICAgICAgICAgIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzOwotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVj
dG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNM
ZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHZlY3Rvckxlbmd0
aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKQEAgLTMxMzIsNyArMzEzMiw3IEBAIGJvb2wgSlNP
YmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogYm9vbCBKU09iamVjdDo6ZW5zdXJl
TGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGlu
Z1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGlu
Z1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0zMTg4LDExICsz
MTg4LDExIEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIHsKICAg
ICBBU1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUo
KSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKLSAgICBBU1NFUlQobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpID4g
bGVuZ3RoKTsKLSAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LmdldCgpLT5pbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOworICAgIEFTU0VSVChtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkgPiBsZW5ndGgpOworICAgIEFTU0VSVCghbV9idXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CiAKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IobGVuZ3RoKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IobGVuZ3RoKSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0zMjA2LDcgKzMyMDYsNyBAQCBCdXR0ZXJmbHkqIEpT
T2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0
aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CiAg
ICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBz
dHJ1Y3R1cmUgaW4tcGxhY2UuCiAKLSAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQ
cm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gQnV0dGVyZmx5
OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCks
IHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uRm9yR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKQEAgLTM1NTIsNyArMzU1Miw3IEBAIHVpbnQzMl90IEpT
T2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OCwxNCArMTc4LDE0
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7CiAgICAgfQogICAgICAgICAKICAgICB1bnNpZ25lZCBnZXRWZWN0
b3JMZW5ndGgoKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5l
Rm9ySlNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTIyMSw3ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1l
IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU1LDcgKzI1NSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAg
IHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRN
YXlCZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXRNYXlCZU51bGwoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJ
REVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMjgxLDcgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCkuYXNJbnQzMigpKTsKQEAgLTI5OSw3ICsyOTksNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAg
ewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1h
eUJlTnVsbCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dE1heUJlTnVsbCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zNTMsNyArMzUzLDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwo
KTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5H
X1RZUEVTOgpAQCAtMzc2LDcgKzM3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBz
ZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgewotICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwpAQCAtNDM2LDcgKzQzNiw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
aW5pdGlhbGl6ZUluZGV4KE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAg
ICBWTSYgdm0gPSBzY29wZS52bSgpOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewogICAgICAg
ICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIHNldElu
ZGV4UXVpY2tseVRvVW5kZWNpZGVkKHZtLCBpLCB2KTsKQEAgLTQ5Myw3ICs0OTMsNyBAQCBwdWJs
aWM6CiAgICAgLy8gYmFycmllcnMuIFRoaXMgaW1wbGllcyBub3QgaGF2aW5nIGFueSBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucy4KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUluZGV4
V2l0aG91dEJhcnJpZXIoT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZSYsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7Ci0gICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0Miw3ICs1
NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgICAgICAgICAgcmV0dXJuICEh
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC01NTksNyArNTU5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VN
b2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjksMTEg
KzY2OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7
CiAgICAgfQogICAgICAgICAKLSAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOyB9Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwo
KTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7IH0KKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOyB9CiAgICAgCi0gICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxp
bmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlv
bkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtODA3LDcg
KzgwNyw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzIoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkp
KQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIo
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpA
QCAtODE5LDcgKzgxOSw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVE
b3VibGUoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91c0RvdWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZURvdWJsZVNsb3co
dm0pOwogICAgIH0KQEAgLTgyOSw3ICs4MjksNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pT
VmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VM
WShoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVD
b250aWd1b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtODQxLDcgKzg0MSw3IEBAIHB1YmxpYzoKICAg
ICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiAoTElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJu
IGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KQEAgLTg5Myw3ICs4OTMsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBv
ciBub3QgdGhlCkBAIC05MDIsNyArOTAyLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKQEAgLTk2OCwxMyArOTY4LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJU
KGxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAgICAgQVNTRVJUKGhh
c0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8
fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkgPCBs
ZW5ndGgpIHsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0
aCkgewogICAgICAgICAgICAgaWYgKCFlbnN1cmVMZW5ndGhTbG93KHZtLCBsZW5ndGgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIGlmIChtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCi0gICAg
ICAgICAgICBtX2J1dHRlcmZseS5nZXQoKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAg
ICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCBwcml2YXRlOgogICAg
IFByb3BlcnR5T2Zmc2V0IHByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmVJRCwgU3RydWN0dXJl
Kik7CiAKIHByb3RlY3RlZDoKLSAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEJ1dHRlcmZs
eT4+IG1fYnV0dGVyZmx5OworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwg
QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToK
ICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVh
dGVVbmluaXRpYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVy
ZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRpYWxpemVkID0gZ2xvYmFs
T2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB2b2lkKiB0
ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICB2b2lkKiB0ZW1w
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlU3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBpZiAoVU5M
SUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY1LDE1ICsxNjUsMTkgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9ydW5Mb29wKENGUnVuTG9vcEdldEN1cnJlbnQo
KSkKICNlbmRpZiAvLyBVU0UoQ0YpCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBlKQotICAgICwg
YXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9l
c05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSksICZHaWdhY2FnZUFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENl
bGw6OkpTQ2VsbCksICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2Uo
KSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhl
YXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2Vs
bCksICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAs
IHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rl
c3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjo6aW5zdGFuY2UoKSkKLSAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNl
KCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgJkZhc3RNYWxsb2NB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgc2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgJkZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQorICAgICwgZmFzdE1h
bGxvY0FsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yPigpKQorICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3Vu
aXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUp
KQorICAgICwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6SlNWYWx1ZSkpCisgICAgLCBwcmlt
aXRpdmVHaWdhY2FnZVNwYWNlKCJQcmltaXRpdmVHaWdhY2FnZSIsIGhlYXAsIEFsbG9jYXRvckF0
dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSksIHBy
aW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlU3Bh
Y2UoIkpTVmFsdWVHaWdhY2FnZSIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5l
ZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSksIGpzVmFsdWVHaWdhY2FnZUFsbG9j
YXRvci5nZXQoKSkKKyAgICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1h
bGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0aWJsZUNlbGxTcGFjZSgiRGVzdHJ1
Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlv
biwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBz
dHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQor
ICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVh
cCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0
aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVh
cCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhlYXAsIGZhc3RNYWxs
b2NBbGxvY2F0b3IuZ2V0KCkpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICwgd2ViQXNz
ZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwg
JkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQorICAgICwgd2Vi
QXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlIiwgaGVh
cCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKICNlbmRpZgogICAgICwgdm1UeXBlKHZtVHlw
ZSkKICAgICAsIGNsaWVudERhdGEoMCkKQEAgLTIxMSw3ICsyMTUsNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2NvZGVDYWNoZShzdGQ6Om1ha2Vf
dW5pcXVlPENvZGVDYWNoZT4oKSkKICAgICAsIG1fYnVpbHRpbkV4ZWN1dGFibGVzKHN0ZDo6bWFr
ZV91bmlxdWU8QnVpbHRpbkV4ZWN1dGFibGVzPigqdGhpcykpCiAgICAgLCBtX3R5cGVQcm9maWxl
ckVuYWJsZWRDb3VudCgwKQotICAgICwgbV9naWdhY2FnZUVuYWJsZWQoSXNXYXRjaGVkKQorICAg
ICwgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoSXNXYXRjaGVkKQogICAgICwgbV9jb250cm9s
Rmxvd1Byb2ZpbGVyRW5hYmxlZENvdW50KDApCiAgICAgLCBtX3NoYWRvd0NoaWNrZW4oc3RkOjpt
YWtlX3VuaXF1ZTxTaGFkb3dDaGlja2VuPigpKQogewpAQCAtMjkwLDcgKzI5NCw3IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBpbml0aWFsaXplSG9zdENh
bGxSZXR1cm5WYWx1ZSgpOyAvLyBUaGlzIGlzIG5lZWRlZCB0byBjb252aW5jZSB0aGUgbGlua2Vy
IG5vdCB0byBkcm9wIGhvc3QgY2FsbCByZXR1cm4gc3VwcG9ydC4KICNlbmRpZgogICAgIAotICAg
IEdpZ2FjYWdlOjphZGREaXNhYmxlQ2FsbGJhY2soZ2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0
aGlzKTsKKyAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2
ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7CiAKICAgICBoZWFwLm5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpOwogICAgIApAQCAtMzU0LDcgKzM1OCw3IEBAIFZNOjp+Vk0oKQogewogICAg
IGF1dG8gZGVzdHJ1Y3Rpb25Mb2NrZXIgPSBob2xkTG9jayhzX2Rlc3RydWN0aW9uTG9jay5yZWFk
KCkpOwogICAgIAotICAgIEdpZ2FjYWdlOjpyZW1vdmVEaXNhYmxlQ2FsbGJhY2soZ2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKKyAgICBHaWdhY2FnZTo6cmVtb3ZlUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7CiAg
ICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgaWYgKFdhc206OmV4aXN0aW5nV29ya2xpc3RPck51bGwoKSkKQEAg
LTQyMywyMSArNDI3LDIxIEBAIFZNOjp+Vk0oKQogI2VuZGlmCiB9CiAKLXZvaWQgVk06OmdpZ2Fj
YWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBhcmd1bWVudCkKK3ZvaWQgVk06OnByaW1pdGl2ZUdp
Z2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBhcmd1bWVudCkKIHsKLSAgICBzdGF0aWNfY2Fz
dDxWTSo+KGFyZ3VtZW50KS0+Z2lnYWNhZ2VEaXNhYmxlZCgpOworICAgIHN0YXRpY19jYXN0PFZN
Kj4oYXJndW1lbnQpLT5wcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKCk7CiB9CiAKLXZvaWQgVk06
OmdpZ2FjYWdlRGlzYWJsZWQoKQordm9pZCBWTTo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgp
CiB7CiAgICAgaWYgKG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkgewot
ICAgICAgICBtX2dpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiR2lnYWNhZ2UgZGlzYWJs
ZWQiKTsKKyAgICAgICAgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywg
IlByaW1pdGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
IAogICAgIC8vIFRoaXMgaXMgdG90YWxseSByYWN5LCBhbmQgdGhhdCdzIE9LLiBUaGUgcG9pbnQg
aXMsIGl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgdGhleSBwYXNzIHRoZQogICAg
IC8vIHVuY2FnZWQgYnVmZmVyIGluIGEgbmljZWx5IHN5bmNocm9uaXplZCBtYW5uZXIuCi0gICAg
bV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkID0gdHJ1ZTsKKyAgICBtX25lZWRUb0ZpcmVQcmlt
aXRpdmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVlOwogfQogCiB2b2lkIFZNOjpzZXRMYXN0U3RhY2tU
b3Aodm9pZCogbGFzdFN0YWNrVG9wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4K
QEAgLTk1LDYgKzk2LDggQEAgY2xhc3MgRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOwogY2xhc3Mg
RXhlY1N0YXRlOwogY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhjZXB0aW9uU2NvcGU7CitjbGFz
cyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNzIEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2ZpbGVy
OwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMjg1LDcgKzI4OCwzMCBAQCBwcml2YXRlOgog
cHVibGljOgogICAgIEhlYXAgaGVhcDsKICAgICAKLSAgICBTdWJzcGFjZSBhdXhpbGlhcnlTcGFj
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+
IG1fZmFzdE1hbGxvY0FsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yPiBtX3ByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1fanNWYWx1ZUdp
Z2FjYWdlQWxsb2NhdG9yOworICAgIAorICAgIFN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlU3Bh
Y2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCisg
ICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlU3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMg
b2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgorCisgICAgLy8gV2UgbWFrZSBjcm9zcy1jdXR0aW5n
IGFzc3VtcHRpb25zIGFib3V0IHR5cGVkIGFycmF5cyBiZWluZyBpbiB0aGUgcHJpbWl0aXZlIEdp
Z2FjYWdlIGFuZCBidXR0ZXJmbGllcworICAgIC8vIGJlaW5nIGluIHRoZSBKU1ZhbHVlIGdpZ2Fj
YWdlLiBGb3Igc29tZSB0eXBlcywgaXQncyBzdXBlciBvYnZpb3VzIHdoZXJlIHRoZXkgc2hvdWxk
IGdvLCBhbmQgc28gd2UKKyAgICAvLyBjYW4gaGFyZGNvZGUgdGhhdCBmYWN0LiBCdXQgc29tZXRp
bWVzIGl0J3Mgbm90IGNsZWFyLCBzbyB3ZSBhYnN0cmFjdCBpdCBieSBoYXZpbmcgYSBHaWdhY2Fn
ZTo6S2luZAorICAgIC8vIGNvbnN0YW50IHNvbWV3aGVyZS4KKyAgICAvLyBGSVhNRTogTWF5YmUg
aXQgd291bGQgYmUgYmV0dGVyIGlmIGV2ZXJ5b25lIGFic3RyYWN0ZWQgdGhpcz8KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ4CisgICAgQUxXQVlT
X0lOTElORSBTdWJzcGFjZSYgZ2lnYWNhZ2VTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1p
dGl2ZToKKyAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVHaWdhY2FnZVNwYWNlOworICAgICAg
ICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIGpzVmFsdWVHaWdh
Y2FnZVNwYWNlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBwcmltaXRpdmVHaWdhY2FnZVNwYWNlOworICAgIH0KICAgICAK
ICAgICAvLyBXaGVuZXZlciBwb3NzaWJsZSwgdXNlIHN1YnNwYWNlRm9yPENlbGxUeXBlPih2bSkg
dG8gZ2V0IG9uZSBvZiB0aGVzZSBzdWJzcGFjZXMuCiAgICAgU3Vic3BhY2UgY2VsbFNwYWNlOwpA
QCAtNTI0LDExICs1NTAsMTEgQEAgcHVibGljOgogICAgIHZvaWQqIGxhc3RTdGFja1RvcCgpIHsg
cmV0dXJuIG1fbGFzdFN0YWNrVG9wOyB9CiAgICAgdm9pZCBzZXRMYXN0U3RhY2tUb3Aodm9pZCop
OwogICAgIAotICAgIHZvaWQgZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCkKKyAgICB2
b2lkIGZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgpCiAgICAgewotICAg
ICAgICBpZiAobV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkKSB7Ci0gICAgICAgICAgICBtX25l
ZWRUb0ZpcmVHaWdhY2FnZUVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fZ2lnYWNhZ2VF
bmFibGVkLmZpcmVBbGwoKnRoaXMsICJHaWdhY2FnZSBkaXNhYmxlZCBhc3luY2hyb25vdXNseSIp
OworICAgICAgICBpZiAobV9uZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKSB7Cisg
ICAgICAgICAgICBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJQ
cmltaXRpdmUgZ2lnYWNhZ2UgZGlzYWJsZWQgYXN5bmNocm9ub3VzbHkiKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNjMzLDcgKzY1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVXNlIEF0
b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVudGlmaWVyLgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgU3RyaW5nJik7CiAgICAg
Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCYgZ2lnYWNhZ2VFbmFibGVkKCkgeyByZXR1cm4gbV9n
aWdhY2FnZUVuYWJsZWQ7IH0KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiBwcmltaXRpdmVHaWdh
Y2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsgfQogCiAg
ICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1
aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCkBAIC03NDEsOCArNzY3LDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKHVuc2lnbmVkIGRl
cHRoLCBFeGNlcHRpb25FdmVudExvY2F0aW9uJik7CiAjZW5kaWYKICAgICAKLSAgICBzdGF0aWMg
dm9pZCBnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOwotICAgIHZvaWQgZ2lnYWNhZ2VE
aXNhYmxlZCgpOworICAgIHN0YXRpYyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxs
YmFjayh2b2lkKik7CisgICAgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKCk7CiAKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CkBAIC03ODcs
OCArODEzLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyPiBt
X3R5cGVQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVByb2ZpbGVyTG9nPiBtX3R5
cGVQcm9maWxlckxvZzsKICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudDsK
LSAgICBib29sIG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX2dpZ2FjYWdlRW5hYmxlZDsKKyAgICBib29sIG1fbmVlZFRvRmly
ZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCB7IGZhbHNlIH07CisgICAgSW5saW5lV2F0Y2hwb2lu
dFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAgICBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENv
bnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9maWxlcjsKICAgICB1bnNpZ25lZCBt
X2NvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkQ291bnQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9D
YWdlZFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHJldmlz
aW9uIDIyMDMyMykKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDkgKzI5LDExIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KIGNs
YXNzIENhZ2VkUHRyIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpL
aW5kIGtpbmQgPSBwYXNzZWRLaW5kOworICAgIAogICAgIENhZ2VkUHRyKFQqIHB0ciA9IG51bGxw
dHIpCiAgICAgICAgIDogbV9wdHIocHRyKQogICAgIHsKQEAgLTQwLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIFQqIGdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9wdHIpOwotICAg
ICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKG1fcHRyKTsKKyAgICAgICAgcmV0dXJuIEdpZ2Fj
YWdlOjpjYWdlZChraW5kLCBtX3B0cik7CiAgICAgfQogICAgIAogICAgIFQqIGdldE1heUJlTnVs
bCgpIGNvbnN0CkBAIC02Nyw2ICs2OSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBUJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAg
ICBUJiBvcGVyYXRvcltdKEluZGV4VHlwZSBpbmRleCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5k
ZXhdOyB9CiAgICAgCiBwcml2YXRlOgogICAgIFQqIG1fcHRyOwpJbmRleDogU291cmNlL1dURi93
dGYvR2lnYWNhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNw
cAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNvbnN0IHZvaWQqIGdfZ2lnYWNhZ2VCYXNlUHRy
OwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCi12b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUp
Cit2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90IHNpemUpCiB7CiAgICAgYXV0byByZXN1bHQg
PSB0cnlGYXN0TWFsbG9jKHNpemUpOwogICAgIHZvaWQqIHJlYWxSZXN1bHQ7CkBAIC00NywxMiAr
NDcsMTIgQEAgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKQogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSkKK3ZvaWQq
IHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVy
biBPU0FsbG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkKHNpemUpOwogfQogCi12b2lkIGZyZWVW
aXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpCit2b2lkIGZyZWVWaXJ0dWFs
UGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpCiB7CiAgICAgT1NBbGxvY2F0
b3I6OnJlbGVhc2VEZWNvbW1pdHRlZChiYXNlUHRyLCBzaXplKTsKIH0KQEAgLTY3LDQyICs2Nyw1
MSBAQCBuYW1lc3BhY2UgR2lnYWNhZ2UgewogLy8gYW5kIHN0YXkgc2NyYW1ibGVkIGV4Y2VwdCBq
dXN0IGJlZm9yZSB1c2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1MDM1CiAKLXZvaWQqIHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90IHNpemUpCit2b2lkKiB0cnlBbGlnbmVkTWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0
cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7
CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2Uo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGFsaWduZWRGcmVlKHZvaWQqIHApCit2
b2lkIGFsaWduZWRGcmVlKEtpbmQga2luZCwgdm9pZCogcCkKIHsKLSAgICBibWFsbG9jOjphcGk6
OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisgICAg
ICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIHApKTsKKyAgICBi
bWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6
Y29tcGlsZXJGZW5jZSgpOwogfQogCi12b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCit2b2lk
KiB0cnlNYWxsb2MoS2luZCBraW5kLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQg
PSBibWFsbG9jOjphcGk6OnRyeU1hbGxvYyhzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNh
Z2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUsIGJt
YWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGZyZWUodm9pZCogcCkKK3ZvaWQgZnJlZShLaW5kIGtp
bmQsIHZvaWQqIHApCiB7Ci0gICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBL
aW5kOjpHaWdhY2FnZSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFT
RV9BU1NFUlQoaXNDYWdlZChraW5kLCBwKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJt
YWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAot
dm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxv
Y2F0ZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJl
c3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6
ZSgpLCBzaXplLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3Vs
dCA9IGJtYWxsb2M6OmFwaTo6dHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6ZSgp
LCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNl
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQq
IGJhc2VQdHIsIHNpemVfdCkKK3ZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHZvaWQq
IGJhc2VQdHIsIHNpemVfdCkKIHsKLSAgICBibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1YWwo
YmFzZVB0ciwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIWJhc2VQdHIp
CisgICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIGJhc2VQ
dHIpKTsKKyAgICBibWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1YWwoYmFzZVB0ciwgYm1hbGxv
Yzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1ICszNyw0NyBAQCBleHRlcm4gV1RGX0VYUE9SVERB
VEEgY29uc3Qgdm9pZCogZ19naWdhCiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKK2VudW0gS2lu
ZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpTVmFsdWUKK307CisKIGlubGluZSB2b2lkIGVuc3Vy
ZUdpZ2FjYWdlKCkgeyB9Ci1pbmxpbmUgdm9pZCBkaXNhYmxlR2lnYWNhZ2UoKSB7IH0KK2lubGlu
ZSB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpIHsgfQogaW5saW5lIGJvb2wgc2hvdWxk
QmVFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotaW5saW5lIHZvaWQgYWRkRGlzYWJsZUNh
bGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQotaW5saW5lIHZvaWQgcmVtb3ZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQoraW5saW5lIHZvaWQgYWRk
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQoraW5s
aW5lIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwg
dm9pZCopIHsgfQorCitBTFdBWVNfSU5MSU5FIGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1
cm4gIlByaW1pdGl2ZSI7CisgICAgY2FzZSBKU1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFs
dWUiOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQqJiBiYXNlUHRyKEtpbmQpCit7Cisg
ICAgcmV0dXJuIGdfZ2lnYWNhZ2VCYXNlUHRyOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIFQqIGNhZ2VkKFQqIHB0cikgeyByZXR1cm4gcHRyOyB9CitpbmxpbmUgVCogY2FnZWQo
S2luZCwgVCogcHRyKSB7IHJldHVybiBwdHI7IH0KIAotaW5saW5lIGJvb2wgaXNDYWdlZChjb25z
dCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGlzQ2FnZWQoS2luZCwgY29u
c3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWlubGluZSB2b2lkKiB0cnlBbGlnbmVkTWFs
bG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7IHJldHVybiB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUpOyB9Ci1pbmxpbmUgdm9pZCBhbGlnbmVkRnJlZSh2b2lk
KiBwKSB7IGZhc3RBbGlnbmVkRnJlZShwKTsgfQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eU1hbGxvYyhzaXplX3Qgc2l6ZSk7Ci1pbmxpbmUgdm9pZCBmcmVlKHZvaWQqIHApIHsgZmFzdEZy
ZWUocCk7IH0KK2lubGluZSB2b2lkKiB0cnlBbGlnbmVkTWFsbG9jKEtpbmQsIHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKSB7IHJldHVybiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhhbGlnbm1l
bnQsIHNpemUpOyB9CitpbmxpbmUgdm9pZCBhbGlnbmVkRnJlZShLaW5kLCB2b2lkKiBwKSB7IGZh
c3RBbGlnbmVkRnJlZShwKTsgfQorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhL
aW5kLCBzaXplX3Qgc2l6ZSk7CitpbmxpbmUgdm9pZCBmcmVlKEtpbmQsIHZvaWQqIHApIHsgZmFz
dEZyZWUocCk7IH0KIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVh
bFBhZ2VzKHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFs
UGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwgc2l6
ZV90IHNpemUpOwogCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQogI2Vsc2UKQEAgLTYzLDEzICs4
NSwxMyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzCiAKIG5hbWVz
cGFjZSBHaWdhY2FnZSB7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGlnbmVkTWFs
bG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGFsaWduZWRGcmVlKHZvaWQqKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxs
b2Moc2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWUodm9pZCopOworV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsaWduZWRNYWxsb2MoS2luZCwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUoS2lu
ZCwgdm9pZCopOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXpl
X3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZShLaW5kLCB2b2lkKik7CiAKLVdURl9F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIs
IHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1
YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVl
VmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBu
YW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVk1DbGll
bnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCiAgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnMo
dm0pCiAgICAgLCBtX2J1aWx0aW5OYW1lcygmdm0pCi0gICAgLCBtX291dHB1dENvbnN0cmFpbnRT
cGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgJkZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgbV9nbG9i
YWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBP
dXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3Jl
IFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxs
b2NhdG9yLmdldCgpKQorICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2Uo
IldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZt
LmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0
Niw3IEBAIHN0YXRpYyBjb25zdCBTZWNvbmRzIG5vblZpc2libGVQcm9jZXNzQ2wKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitzdGF0
aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewogICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOwogfQpAQCAtMjAzLDcgKzIwMyw3IEBAIFdlYlByb2Nlc3M6Oldl
YlByb2Nlc3MoKQogICAgIH0pOwogCiAgICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQo
KSkKLSAgICAgICAgR2lnYWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVk
LCBudWxscHRyKTsKKyAgICAgICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
ayhwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKIH0KIAogV2ViUHJvY2Vzczo6
fldlYlByb2Nlc3MoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBACiAJCTE0REQ3OEM2MThGNDhENzUwMDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjUyMThCQTg4
QTAwMDc2RkEzRiAvKiBBc3luY1Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0Njgx
ODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRW
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3OEM5MThGNDhENzUwMDk1MDcw
MiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3
MDIgLyogQklubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQTE4RjQ4RDc1MDA5
NTA3MDIgLyogTXV0ZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NERDRUQ2MTdBNjQ5RDkwMDkzQjJGMiAvKiBNdXRleC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENCMThGNDhENzUwMDk1
MDcwMiAvKiBQZXJQcm9jZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENDMThG
NDhENzUwMDk1MDcwMiAvKiBQZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQs
NyArOTQsNyBAQAogCQkxNDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJ1bXBSYW5nZS5oOyBwYXRoID0gYm1hbGxv
Yy9CdW1wUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRkEwMDQxOUNF
NEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBMaW5lTWV0YWRhdGEuaDsgcGF0aCA9IGJtYWxsb2MvTGluZU1ldGFkYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBP
YmplY3RUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9iamVj
dFR5cGUuY3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbmxpbmUuaDsgcGF0aCA9IGJtYWxsb2MvSW5s
aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTNFNDYwMTg5RENFMUUwMDU0
NkQ2OCAvKiBCSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJJbmxp
bmUuaDsgcGF0aCA9IGJtYWxsb2MvQklubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5o
OyBwYXRoID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0Yg
LyogU3lzY2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxsLmg7
IHBhdGggPSBibWFsbG9jL1N5c2NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4NywxMCArMjg3LDEwIEBACiAJCQkJNjU5OUM1Q0IxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWls
YWJsZU1lbW9yeS5oICovLAogCQkJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0
LmggKi8sCiAJCQkJMEY1QkYxNzIxRjIzQzU3MTAwMjlEOTFEIC8qIEJFeHBvcnQuaCAqLywKKwkJ
CQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovLAogCQkJCTE0QzkxOUM4
MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCAqLywKIAkJCQkxNEQ5REI0NTE3RjI0NDcx
MDBFQUFCNzkgLyogRml4ZWRWZWN0b3IuaCAqLywKIAkJCQkwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5
MUQgLyogSGVhcEtpbmQuaCAqLywKLQkJCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5s
aW5lLmggKi8sCiAJCQkJMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLywKIAkJ
CQk0NDI2RTI3RTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNDQyNkUy
N0YxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuaCAqLywKQEAgLTM1Myw3ICszNTMsNyBAQAog
CQkJCTE0REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQwMDI3NDkxOEY4OUMxMzAwMTE1Qzk3IC8qIEhlYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNUJGMTQ5MUYyMkE4RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2luZC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBMYXJnZU1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRDODk5MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIExhcmdlUmFuZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRh
dGEuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBBbGxvY2F0b3I6OnNj
YXZlbmdlKCkKICAgICB9CiB9CiAKLU5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxs
b2NhdG9yU2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNz
KQorQk5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2UoQnVt
cEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQogewogICAgIEJ1bXBSYW5n
ZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAK
QEAgLTE1OCw3ICsxNTgsNyBAQCBOT19JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9j
YXRvCiAgICAgbV9oZWFwLmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKGxvY2ssIHNpemVDbGFzcywg
YWxsb2NhdG9yLCBidW1wUmFuZ2VDYWNoZSwgbV9kZWFsbG9jYXRvci5saW5lQ2FjaGUobG9jaykp
OwogfQogCi1JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2Nh
dG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCitCSU5MSU5FIHZvaWQgQWxsb2NhdG9y
OjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNs
YXNzKQogewogICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdl
Q2FjaGVzW3NpemVDbGFzc107CiAgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkpCkBAIC0x
NjYsMTMgKzE2NiwxMyBAQCBJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihC
CiAgICAgcmV0dXJuIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwogfQog
Ci1OT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQor
Qk5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCiB7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwog
ICAgIHJldHVybiBtX2hlYXAuYWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwog
fQogCi1OT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXpl
X3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFz
cyhzaXplX3Qgc2l6ZSkKIHsKICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6c2l6ZUNs
YXNzKHNpemUpOwogICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRv
cnNbc2l6ZUNsYXNzXTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBc3luY1Rhc2tfaAogCiAjaW5jbHVk
ZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIK
ICNpbmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSA8YXRvbWlj
PgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHJldmlzaW9uIDIyMDMyMykJKGZyb20g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaDoyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5saW5l
X2gKKyNkZWZpbmUgSW5saW5lX2gKKworI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3
YXlzX2lubGluZSkpIGlubGluZQorCisjZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChu
b2lubGluZSkpCisKKyNlbmRpZiAvLyBJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9CSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5s
aW5lLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSW5saW5lX2gKLSNkZWZpbmUgSW5saW5lX2gKKyNpZm5kZWYgQklubGlu
ZV9oCisjZGVmaW5lIEJJbmxpbmVfaAogCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChh
bHdheXNfaW5saW5lKSkgaW5saW5lCisjZGVmaW5lIEJJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3
YXlzX2lubGluZSkpIGlubGluZQogCi0jZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChu
b2lubGluZSkpCisjZGVmaW5lIEJOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQog
Ci0jZW5kaWYgLy8gSW5saW5lX2gKKyNlbmRpZiAvLyBCSW5saW5lX2gKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgog
I2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJQZXJQcm9j
ZXNzLmgiCiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTQ2LDI3ICs0NiwyNyBAQCBDYWNoZTo6
Q2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQpCiB7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6
dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNp
emUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFk
PFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0
b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjphbGxv
Y2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKK0JO
T19JTkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQg
aGVhcEtpbmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtp
bmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9j
YXRlKHNpemUpOwogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VO
dWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQorQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFw
S2luZCBoZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgcmV0
dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFw
S2luZCkuYWxsb2NhdG9yKCkuYWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKIH0KIAotTk9fSU5M
SU5FIHZvaWQgQ2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFw
S2luZCwgdm9pZCogb2JqZWN0KQorQk5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9jYXRlU2xv
d0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKIHsKICAgICBQ
ZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQp
LmRlYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShvYmplY3QpOwogfQogCi1OT19JTkxJTkUgdm9pZCog
Q2FjaGU6OnJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9p
ZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnJlYWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBz
aXplX3QgbmV3U2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hl
Pj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5yZWFsbG9jYXRlKG9i
amVjdCwgbmV3U2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogICovCiAKICNpbmNs
dWRlICJCQXNzZXJ0LmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkNodW5rLmgi
CiAjaW5jbHVkZSAiRGVhbGxvY2F0b3IuaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKICNpbmNs
dWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBA
QAogCiAvLyBGSVhNRTogQXNrIGR5bGQgdG8gcHV0IHRoaXMgaW4gaXRzIG93biBwYWdlLCBhbmQg
bXByb3RlY3QgdGhlIHBhZ2UgYWZ0ZXIgd2UgZW5zdXJlIHRoZSBnaWdhY2FnZS4KIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5NzIKLXZvaWQqIGdfZ2lnYWNh
Z2VCYXNlUHRyOwordm9pZCogZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7Cit2b2lkKiBnX2pz
VmFsdWVHaWdhY2FnZUJhc2VQdHI7CiAKIHVzaW5nIG5hbWVzcGFjZSBibWFsbG9jOwogCkBAIC01
Myw4ICs1NCw4IEBAIHN0cnVjdCBDYWxsYmFjayB7CiAgICAgdm9pZCogYXJndW1lbnQgeyBudWxs
cHRyIH07CiB9OwogCi1zdHJ1Y3QgQ2FsbGJhY2tzIHsKLSAgICBDYWxsYmFja3Moc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYpIHsgfQorc3RydWN0IFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3MgeworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3Moc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYpIHsgfQogICAgIAogICAgIFZlY3RvcjxDYWxsYmFjaz4gY2FsbGJhY2tzOwogfTsK
QEAgLTY5LDUyICs3MCw1NyBAQCB2b2lkIGVuc3VyZUdpZ2FjYWdlKCkKICAgICAgICAgICAgIGlm
ICghc2hvdWxkQmVFbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICB2b2lkKiBiYXNlUHRyID0gdHJ5Vk1BbGxvY2F0ZShHSUdBQ0FHRV9T
SVpFLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKLSAgICAgICAgICAgIGlmICgh
YmFzZVB0cikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoYmFzZVB0ciwgR0lHQUNBR0VfU0laRSArIEdJ
R0FDQUdFX1JVTldBWSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGdfZ2lnYWNhZ2VCYXNl
UHRyID0gYmFzZVB0cjsKKyAgICAgICAgICAgIGZvckVhY2hLaW5kKAorICAgICAgICAgICAgICAg
IFsmXSAoS2luZCBraW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSYW5kb21p
emUgd2hlcmUgdGhpcyBnb2VzLgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ1CisgICAgICAgICAgICAgICAgICAgIGJh
c2VQdHIoa2luZCkgPSB0cnlWTUFsbG9jYXRlKEdJR0FDQUdFX1NJWkUsIEdJR0FDQUdFX1NJWkUg
KyBHSUdBQ0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2VQdHIoa2lu
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRkFUQUw6IENv
dWxkIG5vdCBhbGxvY2F0ZSAlcyBnaWdhY2FnZS5cbiIsIG5hbWUoa2luZCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgQkNSQVNIKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFn
ZXMoYmFzZVB0cihraW5kKSwgR0lHQUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldBWSk7CisgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogI2VuZGlmIC8vIEdJR0FDQUdFX0VOQUJMRUQK
IH0KIAotdm9pZCBkaXNhYmxlR2lnYWNhZ2UoKQordm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNh
Z2UoKQogewogICAgIGVuc3VyZUdpZ2FjYWdlKCk7Ci0gICAgaWYgKCFnX2dpZ2FjYWdlQmFzZVB0
cikgeworICAgIGlmICghZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIpIHsKICAgICAgICAgLy8g
SXQgd2FzIG5ldmVyIGVuYWJsZWQuIFRoYXQgbWVhbnMgdGhhdCB3ZSBuZXZlciBldmVuIHNhdmVk
IGFueSBjYWxsYmFja3MuIE9yLCB3ZSBoYWQgYWxyZWFkeSBkaXNhYmxlZAogICAgICAgICAvLyBp
dCBiZWZvcmUsIGFuZCBhbHJlYWR5IGNhbGxlZCB0aGUgY2FsbGJhY2tzLgogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIENhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8
Q2FsbGJhY2tzPjo6Z2V0KCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9j
ayhQZXJQcm9jZXNzPENhbGxiYWNrcz46Om11dGV4KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVD
YWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3M+OjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclBy
b2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOwogICAgIGZvciAoQ2Fs
bGJhY2smIGNhbGxiYWNrIDogY2FsbGJhY2tzLmNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2su
ZnVuY3Rpb24oY2FsbGJhY2suYXJndW1lbnQpOwogICAgIGNhbGxiYWNrcy5jYWxsYmFja3Muc2hy
aW5rKDApOwotICAgIGdfZ2lnYWNhZ2VCYXNlUHRyID0gbnVsbHB0cjsKKyAgICBnX3ByaW1pdGl2
ZUdpZ2FjYWdlQmFzZVB0ciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgYWRkRGlzYWJsZUNhbGxiYWNr
KHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgYWRkUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVu
dCkKIHsKICAgICBlbnN1cmVHaWdhY2FnZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIp
IHsKKyAgICBpZiAoIWdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0
IHdhcyBhbHJlYWR5IGRpc2FibGVkIG9yIHdlIHdlcmUgbmV2ZXIgYWJsZSB0byBlbmFibGUgaXQu
CiAgICAgICAgIGZ1bmN0aW9uKGFyZ3VtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46Omdl
dCgpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxD
YWxsYmFja3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxs
YmFja3MgPSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7Cisg
ICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2
ZURpc2FibGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1
c2goQ2FsbGJhY2soZnVuY3Rpb24sIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgcmVtb3ZlRGlzYWJs
ZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQg
cmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2
b2lkKiBhcmd1bWVudCkKIHsKLSAgICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNz
PENhbGxiYWNrcz46OmdldCgpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxv
Y2soUGVyUHJvY2VzczxDYWxsYmFja3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzPjo6Z2V0KCk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNhbGxiYWNrcy5jYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgaWYgKGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uZnVuY3Rpb24gPT0gZnVuY3Rpb24KICAgICAg
ICAgICAgICYmIGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uYXJndW1lbnQgPT0gYXJndW1lbnQpIHsK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkJFeHBvcnQuaCIKKyNp
bmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCiAjaW5jbHVkZSA8aW50
dHlwZXMuaD4KIApAQCAtNDQsMjMgKzQ1LDYwIEBACiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQg
MAogI2VuZGlmCiAKLWV4dGVybiAiQyIgQkVYUE9SVCB2b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsK
K2V4dGVybiAiQyIgQkVYUE9SVCB2b2lkKiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK2V4
dGVybiAiQyIgQkVYUE9SVCB2b2lkKiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CiAKIG5hbWVz
cGFjZSBHaWdhY2FnZSB7CiAKK2VudW0gS2luZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpTVmFs
dWUKK307CisKIEJFWFBPUlQgdm9pZCBlbnN1cmVHaWdhY2FnZSgpOwogCi1CRVhQT1JUIHZvaWQg
ZGlzYWJsZUdpZ2FjYWdlKCk7CitCRVhQT1JUIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KCk7CisKKy8vIFRoaXMgd2lsbCBjYWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGltbWVkaWF0ZWx5
IGlmIHRoZSBQcmltaXRpdmUgR2lnYWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgorQkVYUE9S
VCB2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQq
KTsKK0JFWFBPUlQgdm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKiko
dm9pZCopLCB2b2lkKik7CisKK0JJTkxJTkUgY29uc3QgY2hhciogbmFtZShLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAgICAgIHJldHVy
biAiUHJpbWl0aXZlIjsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIHJldHVybiAiSlNWYWx1
ZSI7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitCSU5M
SU5FIHZvaWQqJiBiYXNlUHRyKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIFByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNl
UHRyOworICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuIGdfanNWYWx1ZUdpZ2FjYWdl
QmFzZVB0cjsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIGdfcHJpbWl0aXZlR2ln
YWNhZ2VCYXNlUHRyOworfQogCi0vLyBUaGlzIHdpbGwgY2FsbCB0aGUgZGlzYWJsZSBjYWxsYmFj
ayBpbW1lZGlhdGVseSBpZiB0aGUgR2lnYWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgotQkVY
UE9SVCB2b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKLUJF
WFBPUlQgdm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBmb3JFYWNoS2luZChjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIGZ1bmMoUHJpbWl0aXZlKTsKKyAgICBmdW5jKEpTVmFsdWUpOworfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCogY2FnZWQoVCogcHRyKQorQklOTElORSBUKiBjYWdlZChL
aW5kIGtpbmQsIFQqIHB0cikKIHsKICAgICBCQVNTRVJUKHB0cik7Ci0gICAgdm9pZCogZ2lnYWNh
Z2VCYXNlUHRyID0gZ19naWdhY2FnZUJhc2VQdHI7CisgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRy
ID0gYmFzZVB0cihraW5kKTsKICAgICBpZiAoIWdpZ2FjYWdlQmFzZVB0cikKICAgICAgICAgcmV0
dXJuIHB0cjsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oCkBAIC02OCw5ICsxMDYs
OSBAQCBUKiBjYWdlZChUKiBwdHIpCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocHRyKSAmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oR0lHQUNBR0VfTUFTSykpKTsKIH0K
IAotaW5saW5lIGJvb2wgaXNDYWdlZChjb25zdCB2b2lkKiBwdHIpCitCSU5MSU5FIGJvb2wgaXND
YWdlZChLaW5kIGtpbmQsIGNvbnN0IHZvaWQqIHB0cikKIHsKLSAgICByZXR1cm4gY2FnZWQocHRy
KSA9PSBwdHI7CisgICAgcmV0dXJuIGNhZ2VkKGtpbmQsIHB0cikgPT0gcHRyOwogfQogCiBCRVhQ
T1JUIGJvb2wgc2hvdWxkQmVFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJ
KHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBz
dGQ6OmxvY2tfZ3VhcgogICAgICAgICBHaWdhY2FnZTo6ZW5zdXJlR2lnYWNhZ2UoKTsKICNpZiBH
SUdBQ0FHRV9FTkFCTEVECiAgICAgICAgIGlmICh1c2luZ0dpZ2FjYWdlKCkpIHsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQkFTU0VSVChnX2dpZ2FjYWdlQmFzZVB0cik7Ci0gICAgICAgICAgICBtX2xh
cmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShnX2dpZ2FjYWdlQmFzZVB0ciwgR0lHQUNBR0VfU0laRSwg
MCkpOworICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKGdpZ2FjYWdlQmFzZVB0cigpKTsKKyAg
ICAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGdpZ2FjYWdlQmFzZVB0cigpLCBH
SUdBQ0FHRV9TSVpFLCAwKSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTcwLDcgKzcw
LDEyIEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIKIAogYm9vbCBI
ZWFwOjp1c2luZ0dpZ2FjYWdlKCkKIHsKLSAgICByZXR1cm4gbV9raW5kID09IEhlYXBLaW5kOjpH
aWdhY2FnZSAmJiBnX2dpZ2FjYWdlQmFzZVB0cjsKKyAgICByZXR1cm4gaXNHaWdhY2FnZShtX2tp
bmQpICYmIGdpZ2FjYWdlQmFzZVB0cigpOworfQorCit2b2lkKiBIZWFwOjpnaWdhY2FnZUJhc2VQ
dHIoKQoreworICAgIHJldHVybiBHaWdhY2FnZTo6YmFzZVB0cihnaWdhY2FnZUtpbmQobV9raW5k
KSk7CiB9CiAKIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB+
SGVhcCgpID0gZGVsZXRlOwogICAgIAogICAgIGJvb2wgdXNpbmdHaWdhY2FnZSgpOworICAgIHZv
aWQqIGdpZ2FjYWdlQmFzZVB0cigpOyAvLyBNYXkgY3Jhc2ggaWYgIXVzaW5nR2lnYWNhZ2UoKS4K
ICAgICAKICAgICB2b2lkIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKICAgICB2b2lkIGluaXRp
YWxpemVQYWdlTWV0YWRhdGEoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHJl
dmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDU5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQkFzc2VydC5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKKyNpbmNsdWRlICJHaWdhY2FnZS5o
IgorCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGVudW0gY2xhc3MgSGVhcEtpbmQgewogICAgIFBy
aW1hcnksCi0gICAgR2lnYWNhZ2UKKyAgICBQcmltaXRpdmVHaWdhY2FnZSwKKyAgICBKU1ZhbHVl
R2lnYWNhZ2UKIH07CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtSGVhcHMgPSAyOwor
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDM7CisKK0JJTkxJTkUgYm9vbCBp
c0dpZ2FjYWdlKEhlYXBLaW5kIGhlYXBLaW5kKQoreworICAgIHN3aXRjaCAoaGVhcEtpbmQpIHsK
KyAgICBjYXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgY2FzZSBIZWFwS2luZDo6SlNW
YWx1ZUdpZ2FjYWdlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQkNSQVNIKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitCSU5MSU5FIEdpZ2FjYWdlOjpLaW5kIGdpZ2FjYWdl
S2luZChIZWFwS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSGVh
cEtpbmQ6OlByaW1hcnk6CisgICAgICAgIEJDUkFTSCgpOworICAgICAgICByZXR1cm4gR2lnYWNh
Z2U6OlByaW1pdGl2ZTsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZToKKyAg
ICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CisgICAgY2FzZSBIZWFwS2luZDo6SlNW
YWx1ZUdpZ2FjYWdlOgorICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OkpTVmFsdWU7CisgICAgfQor
ICAgIEJDUkFTSCgpOworICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOworfQorCitCSU5M
SU5FIEhlYXBLaW5kIGhlYXBLaW5kKEdpZ2FjYWdlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNo
IChraW5kKSB7CisgICAgY2FzZSBHaWdhY2FnZTo6UHJpbWl0aXZlOgorICAgICAgICByZXR1cm4g
SGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOworICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6
CisgICAgICAgIHJldHVybiBIZWFwS2luZDo6SlNWYWx1ZUdpZ2FjYWdlOworICAgIH0KKyAgICBC
Q1JBU0goKTsKKyAgICByZXR1cm4gSGVhcEtpbmQ6OlByaW1hcnk7Cit9CiAKIH0gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShyZXZpc2lvbiAyMjAz
MjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShub25leGlzdGVudCkKQEAg
LTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIElubGluZV9oCi0jZGVmaW5lIElubGluZV9oCi0KLSNkZWZpbmUgSU5MSU5F
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKLQotI2RlZmluZSBOT19JTkxJ
TkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotCi0jZW5kaWYgLy8gSW5saW5lX2gKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9NYXAuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBNYXBf
aAogI2RlZmluZSBNYXBfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGlu
ZS5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBQZXJQcm9jZXNzX2gKICNkZWZpbmUgUGVyUHJvY2Vzc19oCiAKLSNpbmNs
dWRlICJJbmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIK
ICNpbmNsdWRlICJTdGF0aWNNdXRleC5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNzEsMTMgKzcx
LDEzIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIFQqIFBl
clByb2Nlc3M8VD46OmdldEZhc3RDYXNlKCkKK0JJTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0
RmFzdENhc2UoKQogewogICAgIHJldHVybiBzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X2NvbnN1bWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIFQqIFBlclByb2Nl
c3M8VD46OmdldCgpCitCSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldCgpCiB7CiAgICAgVCog
b2JqZWN0ID0gZ2V0RmFzdENhc2UoKTsKICAgICBpZiAoIW9iamVjdCkKQEAgLTg2LDcgKzg2LDcg
QEAgSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldCgpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1OT19JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0U2xvd0Nhc2UoKQorQk5PX0lOTElO
RSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRTbG93Q2FzZSgpCiB7CiAgICAgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiBsb2NrKHNfbXV0ZXgpOwogICAgIGlmICghc19vYmplY3QubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9jb25zdW1lKSkgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Q
ZXJUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVh
ZC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVh
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFBlclRocmVhZF9o
CiAjZGVmaW5lIFBlclRocmVhZF9oCiAKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAi
QlBsYXRmb3JtLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVySGVhcEtpbmQu
aCIKICNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CkBAIC0xMTUsNyAr
MTE1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvbmNlX2ZsYWcgUGVyVAogI2VuZGlm
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyVGhyZWFkPFQ+OjpnZXRGYXN0
Q2FzZSgpCitCSU5MSU5FIFQqIFBlclRocmVhZDxUPjo6Z2V0RmFzdENhc2UoKQogewogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUKj4oUGVyVGhyZWFkU3RvcmFnZTxUPjo6Z2V0KCkpOwogfQpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
aWZuZGVmIFZlY3Rvcl9oCiAjZGVmaW5lIFZlY3Rvcl9oCiAKLSNpbmNsdWRlICJJbmxpbmUuaCIK
KyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgogI2luY2x1ZGUg
PGNzdGRkZWY+CiAjaW5jbHVkZSA8Y3N0cmluZz4KQEAgLTExOSw3ICsxMTksNyBAQCBpbmxpbmUg
VCYgVmVjdG9yPFQ+OjpvcGVyYXRvcltdKHNpemVfdCBpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3QgVCYgdmFsdWUpCitCSU5MSU5F
IHZvaWQgVmVjdG9yPFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQogewogICAgIGlmIChtX3NpemUg
PT0gbV9jYXBhY2l0eSkKICAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CkBAIC0yMTIsMTQgKzIxMiwx
NCBAQCB2b2lkIFZlY3RvcjxUPjo6cmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1OT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnNocmlua0NhcGFjaXR5
KCkKK0JOT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnNocmlua0NhcGFjaXR5KCkKIHsKICAgICBz
aXplX3QgbmV3Q2FwYWNpdHkgPSBtYXgoaW5pdGlhbENhcGFjaXR5KCksIG1fY2FwYWNpdHkgLyBz
aHJpbmtGYWN0b3IpOwogICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpncm93Q2FwYWNp
dHkoKQorQk5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5KCkKIHsKICAgICBz
aXplX3QgbmV3Q2FwYWNpdHkgPSBtYXgoaW5pdGlhbENhcGFjaXR5KCksIG1fc2l6ZSAqIGdyb3dG
YWN0b3IpOwogICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317385</attachid>
            <date>2017-08-06 15:29:14 -0700</date>
            <delta_ts>2017-08-07 10:24:58 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139842</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBA
QAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2
ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGFwdHMgSlNDIHRvIHRoZXJlIGJlaW5nIHR3byBn
aWdhY2FnZXMuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIG1hdHRlcnMgc2ltcGxlciwgdGhp
cyB0dXJucyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9ycyBpbnRvIHBlci1WTSBpbnN0YW5jZXMgcmF0
aGVyIHRoYW4KKyAgICAgICAgc2luZ2xldG9ucy4gSSBkb24ndCB0aGluayB3ZSB3ZXJlIGdhaW5p
bmcgYW55dGhpbmcgYnkgbWFraW5nIHRoZW0gYmUgc2luZ2xldG9ucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgbWFrZXMgaXQgZWFzeSB0byB0ZWFjaCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUga2luZHMgb2YKKyAgICAgICAgZ2lnYWNhZ2Vz
LiBXZSdsbCBoYXZlIG9uZSBvZiB0aG9zZSBhbGxvY2F0b3JzIHBlciBjYWdlLgorICAgICAgICAK
KyAgICAgICAgRnJvbSB0aGVyZSwgdGhpcyBjaGFuZ2UgdGVhY2hlcyBldmVyeW9uZSB3aG8gcHJl
dmlvdXNseSBrbmV3IGFib3V0IGNhZ2VzIHRoYXQgdGhlcmUgYXJlIHR3byBjYWdlcy4KKyAgICAg
ICAgVGhpcyBtZWFucyBoYXZpbmcgdG8gc3BlY2lmeSBlaXRoZXIgR2lnYWNhZ2U6OlByaW1pdGl2
ZSBvciBHaWdhY2FnZTo6SlNWYWx1ZS4gSW4gbW9zdCBwbGFjZXMsIHRoaXMgaXMKKyAgICAgICAg
ZWFzeTogdHlwZWQgYXJyYXlzIGFyZSBQcmltaXRpdmUgYW5kIGJ1dHRlcmZsaWVzIGFyZSBKU1Zh
bHVlLiBCdXQgdGhlcmUgYXJlIGEgZmV3IHBsYWNlcyB3aGVyZSBpdCdzCisgICAgICAgIG5vdCBz
byBvYnZpb3VzLCBzbyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIHNvbWUgaGVscGVycyB0byBtYWtl
IGl0IGVhc3kgdG8gZGVmaW5lIHdoYXQgY2FnZSB5b3Ugd2FudAorICAgICAgICB0byB1c2UgaW4g
b25lIHBsYWNlIGFuZCByZWZlciB0byBpdCBhYnN0cmFjdGx5LiBXZSBkbyB0aGlzIGluIERpcmVj
dEFyZ3VtZW50cyBhbmQgR2VuZXJpY0FyZ3VtZW50cy5oCisgICAgICAgIAorICAgICAgICBBIGxv
dCBvZiB0aGUgbWFnaWMgb2YgdGhpcyBjaGFuZ2UgaXMgZHVlIHRvIENhZ2VkQmFycmllclB0ciwg
d2hpY2ggY29tYmluZXMgQXV4aWxpYXJ5QmFycmllciBhbmQKKyAgICAgICAgQ2FnZWRQdHIuIFRo
aXMgcmVtb3ZlcyBvbmUgbGF5ZXIgb2YgImdldCgpIiBjYWxscyBmcm9tIGEgYnVuY2ggb2YgcGxh
Y2VzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQnV0dGVyZmx5KToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld1R5cGVkQXJyYXkpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RGlyZWN0UG5hbWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhTaXplSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNhZ2VkKToKKyAgICAgICAgKiBoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6Omluc3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0Zhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1l
bW9yeSk6CisgICAgICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
aW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKHByaW1pdGl2ZUdpZ2Fj
YWdlRGlzYWJsZWQpOgorICAgICAgICAoanNjbWFpbik6CisgICAgICAgIChnaWdhY2FnZURpc2Fi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21C
eXRlcyk6CisgICAgICAgICogcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmg6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgICogcnVu
dGltZS9DYWdlZEJhcnJpZXJQdHIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhZ2VkQmFycmll
clB0cjo6Q2FnZWRCYXJyaWVyUHRyKToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpj
bGVhcik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6c2V0KToKKyAgICAgICAgKEpT
Qzo6Q2FnZWRCYXJyaWVyUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJp
ZXJQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0
cjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3Bl
cmF0b3IhPSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6c2V0V2l0aG91dEJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yKiBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgICog
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVu
dHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjp1bm1h
cEFyZ3VtZW50KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmlzTWFwcGVkQXJndW1lbnQgY29uc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5jcHA6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWZmZXI6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpidWZmZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6cmVoYXNoKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3Rl
ZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9w
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmZhc3RTbGljZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAo
SlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJh
eS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0xv
Y2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFw
c2hvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y29udmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMlRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3Vi
bGVUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRv
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5
VG9VbmRlY2lkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWRE
ZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhTbG93T3JCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0
aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEFy
cmF5TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRyeUdldEluZGV4
UXVpY2tseSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojppbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFyc2VJbmRleGlu
Z01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpv
dXRPZkxpbmVTdG9yYWdlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om91dE9mTGlu
ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW50MzIpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2VPck51bGwpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToK
KyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgIChKU0M6OlZNOjpwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNh
Z2VEaXNhYmxlZCk6CisgICAgICAgIChKU0M6OlZNOjpnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VEaXNhYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpmaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkKToKKyAgICAgICAgKEpTQzo6Vk06OmZpcmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpnaWdhY2FnZUVuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKwogMjAxNy0wOC0wNiAgT2xla3NhbmRyIFNr
YWNoa292ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4KIAogICAgICAgICBbRVNOZXh0XSBBc3luYyBp
dGVyYXRpb24gLSBJbXBsZW1lbnQgQXN5bmMgR2VuZXJhdG9yIC0gcGFyc2VyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MDIsOSArMzgwMiw5IEBAIGludCBydW5KU0Mo
Q29tbWFuZExpbmUgb3B0aW9ucywgYm9vbCBpc1cKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgdm9pZCBnaWdhY2FnZURpc2FibGVkKHZvaWQqKQorc3RhdGljIHZvaWQgcHJpbWl0aXZl
R2lnYWNhZ2VEaXNhYmxlZCh2b2lkKikKIHsKLSAgICBkYXRhTG9nKCJHaWdhY2FnZSBkaXNhYmxl
ZCEgQWJvcnRpbmcuXG4iKTsKKyAgICBkYXRhTG9nKCJQcmltaXRpdmUgZ2lnYWNhZ2UgZGlzYWJs
ZWQhIEFib3J0aW5nLlxuIik7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CiAK
QEAgLTM4MjcsNyArMzgyNyw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICBKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkoKTsKICNlbmRpZgogICAgIGlmIChHaWdh
Y2FnZTo6c2hvdWxkQmVFbmFibGVkKCkpCi0gICAgICAgIEdpZ2FjYWdlOjphZGREaXNhYmxlQ2Fs
bGJhY2soZ2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0cik7CisgICAgICAgIEdpZ2FjYWdlOjphZGRQ
cmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0
cik7CiAKICAgICBpbnQgcmVzdWx0OwogICAgIHJlc3VsdCA9IHJ1bkpTQygKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODk4LDYgKzg5OCw3IEBACiAJCTBGRUMzQzU3MUYzM0E0NTMwMEY1OUI2QyAv
KiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNTUxRjMzQTQ1MzAwRjU5QjZDIC8qIEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzNDNUExRjMzQTQ4OTAwRjU5QjZDIC8qIEdp
Z2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1ODFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJMEZFQzNDNUIxRjMzQTQ4OTAw
RjU5QjZDIC8qIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNTkxRjMzQTQ4OTAwRjU5QjZD
IC8qIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyB9OworCQkwRkVDM0M2MDFG
Mzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1RjFGMzc5RjUzMDBGNTlCNkMgLyogQ2Fn
ZWRCYXJyaWVyUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsgfTsKIAkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OwogCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwICovOyB9OwpAQCAtMzQ5Niw2ICszNDk3LDcgQEAKIAkJMEZFQzNDNTUxRjMzQTQ1MzAwRjU5
QjZDIC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUMzQzU4MUYzM0E0ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNDNTkxRjMz
QTQ4OTAwRjU5QjZDIC8qIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWdlZEJhcnJpZXJQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0FyZ3VtZW50UmVn
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0FyZ3VtZW50UmVn
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjYyMiw2ICs2NjI0LDcgQEAKIAkJCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVu
ZGxlUGF0aC5tbSAqLywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5
LmggKi8sCiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMu
aCAqLywKKwkJCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRCYXJyaWVyUHRyLmgg
Ki8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLywKIAkJ
CQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLywKIAkJCQlGRTgwQzE5
ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgKi8sCkBAIC04NjM5LDYgKzg2NDIs
NyBAQAogCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBw
ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNjE3QTBCQUE4MDA2QkE1NTQg
LyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzIx
MTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4OThGMzIxQjI3Njg5RjAwODNBMzND
IC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM5N0YzRTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
OCw3ICs4NTgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAg
ICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lu
bGluZSkgewotICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0u
YXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOworICAgICAgICAgICAgICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0
b3IpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2sh
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKICAgICAKICAgICBpZiAoc2l6ZSkgewotICAgICAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5hdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yKHNpemUpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUo
c3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2Vz
KTsKICAgICAgICAgICAgIApAQCAtNzg2OCw3ICs3ODY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIAogICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpOwogCi0gICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6
ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSk7CiAKICAgICBpZiAoIWFs
bG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNzkxMyw3ICs3OTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9m
TGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9u
KCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIAot
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
KG5ld1NpemUpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5w
cmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0OTQsNyArODQ5NCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICAgICAgbV9q
aXQuYW5kMzIoVHJ1c3RlZEltbTMyKH43KSwgc2NyYXRjaEdQUik7CiAgICAgfQogICAgIG1faml0
LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZt
KCktPmF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLAorICAgICAgICBzdG9y
YWdlR1BSLCBtX2ppdC52bSgpLT5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSLAogICAgICAgICBzY3JhdGNoR1BSMiwgc2xvd0Nhc2VzKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzaXplR1BSKTsKQEAgLTEwMTEyLDcgKzEwMTEyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQnV0dGVyZgogICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaDEpOwogICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBtX2pp
dC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAgICBzdG9yYWdlUmVzdWx0R1BSLCBt
X2ppdC52bSgpLT5hdXhpbGlhcnlTcGFjZSwgc2NyYXRjaDIsIHNjcmF0Y2gxLCBzY3JhdGNoMywg
c2xvd0Nhc2VzKTsKKyAgICAgICAgc3RvcmFnZVJlc3VsdEdQUiwgbV9qaXQudm0oKS0+anNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2gyLCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNs
b3dDYXNlcyk7CiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwgc3RvcmFnZVJlc3VsdEdQUik7CiAKICAgICBtX2ppdC5zdG9yZTMyKHNpemVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZXN1bHRHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjM1
LDcgKzMyMzUsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOwogICAgICAgICBpZiAobV9ub2RlLT5vcCgpICE9IEdldEJ1dHRlcmZseVdp
dGhvdXRDYWdpbmcpCi0gICAgICAgICAgICBidXR0ZXJmbHkgPSBjYWdlZChidXR0ZXJmbHkpOwor
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gY2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUsIGJ1dHRlcmZs
eSk7CiAgICAgICAgIHNldFN0b3JhZ2UoYnV0dGVyZmx5KTsKICAgICB9CiAKQEAgLTMyNzIsNyAr
MzI3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgaXNUeXBlZFZpZXcobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlw
ZSgpKSk7Ci0gICAgICAgIHNldFN0b3JhZ2UoY2FnZWQobV9vdXQubG9hZFB0cihjZWxsLCBtX2hl
YXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpKTsKKyAgICAgICAgc2V0U3RvcmFnZShjYWdl
ZChHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNBcnJh
eUJ1ZmZlclZpZXdfdmVjdG9yKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVj
a0FycmF5KCkKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oNykpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yU2l6ZSh2bSgpLmF1eGlsaWFyeVNwYWNlLCBieXRlU2l6ZSwgc2xvd0Nhc2UpOworICAg
ICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5wcmltaXRp
dmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBieXRlU2l6ZSwgc2xvd0Nhc2UpOwogICAgICAgICAg
ICAgTFZhbHVlIHN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgc2xvd0Nhc2Up
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzcGxhdFdvcmRzKApAQCAtODg2OSw3ICs4ODY5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0
LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCks
IGNhZ2VkKHN0b3JhZ2UpLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSkpKTsKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFw
cy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGNhZ2VkKEdpZ2FjYWdlOjpKU1ZhbHVlLCBzdG9y
YWdlKSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpKSk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKQEAgLTkwNDksNyArOTA0OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9CdXR0ZXJmbHkgPSBtX291dC5hbmNo
b3IobV9vdXQuaW50UHRyWmVybyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
TFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCgKLSAgICAgICAgICAgICAg
ICAgICAgYWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmF1eGlsaWFyeVNwYWNlLCBidXR0ZXJmbHlTaXpl
LCBzbG93UGF0aCksCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAog
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBMVmFsdWUg
ZmFzdEJ1dHRlcmZseVZhbHVlID0gbV9vdXQuYWRkKApAQCAtMTAwMDUsNyArMTAwMDUsNyBAQCBw
cml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6
ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHZtKCkuYXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplSW5CeXRlcyk7CiAgICAgICAgIExWYWx1
ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxs
b2NhdG9yKSwgc2xvd1BhdGgpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKAogICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRy
KHNpemVJbkJ5dGVzICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0YXJ0T2ZTdG9yYWdlKSk7
CkBAIC0xMTIzMyw3ICsxMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBidXR0ZXJm
bHlTaXplID0gbV9vdXQuYWRkKAogICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1fb3V0LmNvbnN0
SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgIAotICAgICAgICBM
VmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmF1eGlsaWFyeVNwYWNlLCBi
dXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JTaXplKHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIGJ1dHRlcmZs
eVNpemUsIGZhaWxDYXNlKTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2Nh
dGVIZWFwQ2VsbChhbGxvY2F0b3IsIGZhaWxDYXNlKTsKICAgICAgICAgICAgIAogICAgICAgICBM
VmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuYWRkKHN0YXJ0T2ZTdG9yYWdlLCBtX291dC5jb25zdElu
dFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CkBAIC0xMTYxNCwzNCArMTE2MTQsMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBMVmFsdWUgY2FnZWQoTFZhbHVl
IHB0cikKKyAgICBMVmFsdWUgY2FnZWQoR2lnYWNhZ2U6OktpbmQga2luZCwgTFZhbHVlIHB0cikK
ICAgICB7Ci0gICAgICAgIGlmICh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgp
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtKCkuZ2ln
YWNhZ2VFbmFibGVkKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYmFzZVB0
ciA9IG1fb3V0LmNvbnN0SW50UHRyKGdfZ2lnYWNhZ2VCYXNlUHRyKTsKLSAgICAgICAgICAgIExW
YWx1ZSBtYXNrID0gbV9vdXQuY29uc3RJbnRQdHIoR0lHQUNBR0VfTUFTSyk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgQjMgbWVzc2lu
ZyB1cCB0aGUgYml0QW5kLiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4Y2VsbGVudAotICAg
ICAgICAgICAgLy8gY29kZWdlbiBmb3IgMi1vcGVyYW5kIGFuZHEgb24geDg2LTY0LgotICAgICAg
ICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBCdXQgQjMgd2lsbCBjdXJyZW50bHkgbWVzcyB1cCB0aGUgY29k
ZSBnZW5lcmF0aW9uIG9mIHRoaXMgYWRkLiBCYXNpY2FsbHksIGFueSBvZmZzZXQgZnJvbSB3aGF0
IHdlCi0gICAgICAgICAgICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lhdGVkIGFu
ZCBmb2xkZWQgd2l0aCBnX2dpZ2FjYWdlQmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGluIHdoaWNo
Ci0gICAgICAgICAgICAvLyBtb3ZlQ29uc3RhbnRzKCkgb2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0
byByZWFzc29jaWF0ZSBpbiBvcmRlciB0byBob2lzdCB0aGUgYmlnIGNvbnN0YW50cy4gQnV0Ci0g
ICAgICAgICAgICAvLyBpdCdzIG11Y2ggZWFzaWVyIHRvIGp1c3QgYmxvY2sgQjMncyBiYWRuZXNz
IGhlcmUuIFRoYXQncyB3aGF0IHdlIGRvIGZvciBub3cuCi0gICAgICAgICAgICBQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2VQdHIpOwotICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKG1hc2tlZCk7Ci0gICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgW10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdw
cigpLCBwYXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgICAgIHJldHVy
biBwYXRjaHBvaW50OworICAgICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKSB7
CisgICAgICAgICAgICBpZiAodm0oKS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxs
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHZtKCkucHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJl
dHVybiBwdHI7CisgICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbV9vdXQuY29uc3RJbnRQdHIoR2ln
YWNhZ2U6OmJhc2VQdHIoa2luZCkpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LmNvbnN0
SW50UHRyKEdJR0FDQUdFX01BU0spOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2
ZSB0byB3b3JyeSBhYm91dCBCMyBtZXNzaW5nIHVwIHRoZSBiaXRBbmQuIEFsc28sIHdlIHdhbnQg
dG8gZ2V0IEIzJ3MgZXhjZWxsZW50CisgICAgICAgIC8vIGNvZGVnZW4gZm9yIDItb3BlcmFuZCBh
bmRxIG9uIHg4Ni02NC4KKyAgICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIs
IG1hc2spOworICAgICAgICAKKyAgICAgICAgLy8gQnV0IEIzIHdpbGwgY3VycmVudGx5IG1lc3Mg
dXAgdGhlIGNvZGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGFkZC4gQmFzaWNhbGx5LCBhbnkgb2Zmc2V0
IGZyb20gd2hhdCB3ZQorICAgICAgICAvLyBjb21wdXRlIGhlcmUgd2lsbCBnZXQgcmVhc3NvY2lh
dGVkIGFuZCBmb2xkZWQgd2l0aCBHaWdhY2FnZTo6YmFzZVB0ci4gVGhlcmUncyBhIHdvcmxkIGlu
IHdoaWNoCisgICAgICAgIC8vIG1vdmVDb25zdGFudHMoKSBvYnNlcnZlcyB0aGF0IGl0IG5lZWRz
IHRvIHJlYXNzb2NpYXRlIGluIG9yZGVyIHRvIGhvaXN0IHRoZSBiaWcgY29uc3RhbnRzLiBCdXQK
KyAgICAgICAgLy8gaXQncyBtdWNoIGVhc2llciB0byBqdXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBo
ZXJlLiBUaGF0J3Mgd2hhdCB3ZSBkbyBmb3Igbm93LgorICAgICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOworICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZVB0cik7CisgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3RlcihtYXNrZWQpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOworICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKICAgICB9CiAgICAgCiAgICAgdm9pZCBi
dWlsZFN3aXRjaChTd2l0Y2hEYXRhKiBkYXRhLCBMVHlwZSB0eXBlLCBMVmFsdWUgc3dpdGNoVmFs
dWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgRmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMgRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3IqIHJlc3VsdDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VGbGFnLAotICAg
ICAgICBbXSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KIEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFs
bG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBw
dWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0YW5jZSgp
OwotCisgICAgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICB+RmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICAKICAgICB2b2lkKiB0cnlBbGxvY2F0
ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjQgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKLSNpbmNs
dWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KLQogbmFtZXNwYWNlIEpTQyB7
CiAKLUdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOjppbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogcmVzdWx0OwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsK
LSAgICBzdGQ6OmNhbGxfb25jZSgKLSAgICAgICAgb25jZUZsYWcsCi0gICAgICAgIFtdIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IG5ldyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsK
LSAgICAgICAgfSk7Ci0gICAgcmV0dXJuICpyZXN1bHQ7Ci19Ci0KLUdpZ2FjYWdlQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKK0dpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdp
Z2FjYWdlOjpLaW5kIGtpbmQpCisgICAgOiBtX2tpbmQoa2luZCkKIHsKIH0KIApAQCAtNTMsMTcg
KzM5LDE3IEBAIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fkdpZ2FjYWcKIAogdm9p
ZCogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFsaWduZWRNZW1v
cnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIEdpZ2FjYWdl
Ojp0cnlBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7CisgICAgcmV0dXJuIEdpZ2FjYWdl
Ojp0cnlBbGlnbmVkTWFsbG9jKG1fa2luZCwgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogdm9pZCBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqIGJh
c2VQdHIpCiB7Ci0gICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKGJhc2VQdHIpOworICAgIEdpZ2Fj
YWdlOjphbGlnbmVkRnJlZShtX2tpbmQsIGJhc2VQdHIpOwogfQogCiB2b2lkIEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAg
IG91dC5wcmludCgiR2lnYWNhZ2UiKTsKKyAgICBvdXQucHJpbnQoR2lnYWNhZ2U6Om5hbWUobV9r
aW5kKSwgIkdpZ2FjYWdlIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxNiArMjYsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgewogcHVibGljOgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4n
dCBiZSBhIHNpbmdsZXRvbi4gVGhlcmUgc2hvdWxkIGJlIGRpZmZlcmVudCBpbnN0YW5jZXMgZm9y
IHByaW1hcmllcywgSlNWYWx1ZXMsCi0gICAgLy8gYW5kIG90aGVyIHRoaW5ncy4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5Ci0gICAgc3RhdGlj
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCk7CiAgICAgfkdpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwogICAgIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxp
Z25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7CkBAIC00
NCw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KTsKKyAgICBHaWdhY2FnZTo6S2luZCBtX2tpbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzc2
LDEwICszNzYsMTAgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICBl
bmQpCiBlbmQKIAotbWFjcm8gbG9hZENhZ2VkKHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKK21hY3Jv
IGxvYWRDYWdlZChiYXNlUHRyLCBzb3VyY2UsIGRlc3QsIHNjcmF0Y2gpCiAgICAgbG9hZHAgc291
cmNlLCBkZXN0CiAgICAgaWYgR0lHQUNBR0VfRU5BQkxFRCBhbmQgbm90IENfTE9PUAotICAgICAg
ICBsb2FkcCBfZ19naWdhY2FnZUJhc2VQdHIsIHNjcmF0Y2gKKyAgICAgICAgbG9hZHAgYmFzZVB0
ciwgc2NyYXRjaAogICAgICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgY29u
c3RleHByIEdJR0FDQUdFX01BU0ssIGRlc3QKICAgICAgICAgYWRkcCBzY3JhdGNoLCBkZXN0CkBA
IC0xMjA5LDcgKzEyMDksNyBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogCiBtYWNybyBsb2FkUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHZhbHVlKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQsIC5pc0lubGluZQotICAgIGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2Jq
ZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorICAgIGxvYWRDYWdlZChf
Z19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5k
U3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIG5lZ2kgcHJvcGVydHlPZmZz
ZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJ
bnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCBlbmQKIAogbWFjcm8gc3Rv
cmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5k
U3RvcmFnZSwgdmFsdWUsIHNjcmF0Y2gpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBm
aXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgc2NyYXRjaCkK
KyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCBzY3JhdGNoKQogICAg
IG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQs
IHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMjk4LDcgKzEyOTgsNyBA
QCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BH
ZXRBcnJheUxlbmd0aFNsb3cKICAgICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0
QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxv
YWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCisgICAgbG9hZENhZ2Vk
KF9nX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQw
LCB0MikKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5vcEdldEFy
cmF5TGVuZ3RoU2xvdwogICAgIG9ycSB0YWdUeXBlTnVtYmVyLCB0MApAQCAtMTQ4MSw3ICsxNDgx
LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMs
IHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFs
U2xvdykKICAgICBzeGkycSB0MSwgdDEKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QwXSwgdDMsIHQ1KQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRy
LCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdDUpCiAgICAgYW5kaSBJbmRleGluZ1No
YXBlTWFzaywgdDIKICAgICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAub3BHZXRCeVZhbElzQ29udGln
dW91cwogICAgIGJpbmVxIHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGln
dW91cwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgYmlh
IHQyLCBMYXN0QXJyYXlUeXBlIC0gRmlyc3RBcnJheVR5cGUsIC5vcEdldEJ5VmFsU2xvdwogICAg
IAogICAgICMgU3dlZXQsIG5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIHR5cGVkIGFycmF5LiBE
byBzb21lIGJhc2ljIHRoaW5ncyBub3cuCi0gICAgbG9hZENhZ2VkKEpTQXJyYXlCdWZmZXJWaWV3
OjptX3ZlY3Rvclt0MF0sIHQzLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2dfcHJpbWl0aXZlR2lnYWNh
Z2VCYXNlUHRyLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDUpCiAgICAg
YmlhZXEgdDEsIEpTQXJyYXlCdWZmZXJWaWV3OjptX2xlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xv
dwogICAgIAogICAgICMgTm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzLiBOb3Rl
IHRoYXQgd2UgY2FuIHRyZWF0IFVpbnQ4QXJyYXlUeXBlIGFuZApAQCAtMTYxOSw3ICsxNjE5LDcg
QEAgbWFjcm8gcHV0QnlWYWwoc2xvd1BhdGgpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIs
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFs
U2xvdykKICAgICBzeGkycSB0MywgdDMKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAsIHQ1KQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRy
LCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdDUpCiAgICAgYW5kaSBJbmRleGluZ1No
YXBlTWFzaywgdDIKICAgICBiaW5lcSB0MiwgSW50MzJTaGFwZSwgLm9wUHV0QnlWYWxOb3RJbnQz
MgogICAgIGNvbnRpZ3VvdXNQdXRCeVZhbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw3IEBAIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW4K
ICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtRWxlbWVudHMpICogc3Rh
dGljX2Nhc3Q8c2l6ZV90PihlbGVtZW50Qnl0ZVNpemUpOwogICAgIGlmICghc2l6ZSkKICAgICAg
ICAgc2l6ZSA9IDE7IC8vIE1ha2Ugc3VyZSBtYWxsb2MgYWN0dWFsbHkgYWxsb2NhdGVzIHNvbWV0
aGluZywgYnV0IG5vdCB0b28gbXVjaC4gV2UgdXNlIG51bGwgdG8gbWVhbiB0aGF0IHRoZSBidWZm
ZXIgaXMgbmV1dGVyZWQuCi0gICAgbV9kYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhzaXplKTsK
KyAgICBtX2RhdGEgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNp
emUpOwogICAgIGlmICghbV9kYXRhKSB7CiAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9j
YXRlKHVuCiAgICAgICAgIG1lbXNldChtX2RhdGEsIDAsIHNpemUpOwogCiAgICAgbV9zaXplSW5C
eXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgIG1fZGVzdHJ1Y3RvciA9
IFtdICh2b2lkKiBwKSB7IEdpZ2FjYWdlOjpmcmVlKHApOyB9OworICAgIG1fZGVzdHJ1Y3RvciA9
IFtdICh2b2lkKiBwKSB7IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHApOyB9
OwogfQogCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQoKQpAQCAtMTg3LDcg
KzE4Nyw3IEBAIFJlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnIKIC8vICAg
ZnJvbSB0aGUgY2FnZS4KIFJlZjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0
ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlRnJvbUJ5dGVzKGRhdGEsIGJ5dGVMZW5ndGgsIFtdICh2b2lkKiBwKSB7IEdpZ2FjYWdl
OjpmcmVlKHApOyB9KTsKKyAgICByZXR1cm4gY3JlYXRlRnJvbUJ5dGVzKGRhdGEsIGJ5dGVMZW5n
dGgsIFtdICh2b2lkKiBwKSB7IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHAp
OyB9KTsKIH0KIAogLy8gRklYTUU6IFdlIGNhbm5vdCB1c2UgdGhpcyBleGNlcHQgaWYgdGhlIG1l
bW9yeSBjb21lcyBmcm9tIHRoZSBjYWdlLgpAQCAtMTk4LDggKzE5OCw4IEBAIFJlZjxBcnJheUJ1
ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3AKIC8vIC0gV2ViQXNzZW1ibHkuIFdhc20gc2hv
dWxkIGFsbG9jYXRlIGZyb20gdGhlIGNhZ2UuCiBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGVGcm9tQnl0ZXMoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCwg
QXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJiBkZXN0cnVjdG9yKQogewotICAgIGlmICgh
R2lnYWNhZ2U6OmlzQ2FnZWQoZGF0YSkgJiYgZGF0YSAmJiBieXRlTGVuZ3RoKQotICAgICAgICBH
aWdhY2FnZTo6ZGlzYWJsZUdpZ2FjYWdlKCk7CisgICAgaWYgKCFHaWdhY2FnZTo6aXNDYWdlZChH
aWdhY2FnZTo6UHJpbWl0aXZlLCBkYXRhKSAmJiBkYXRhICYmIGJ5dGVMZW5ndGgpCisgICAgICAg
IEdpZ2FjYWdlOjpkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKTsKICAgICAKICAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpLCBieXRlTGVuZ3Ro
LCBXVEZNb3ZlKGRlc3RydWN0b3IpKTsKICAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoY29udGVu
dHMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlh
cnlCYXJyaWVyLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBA
QCBjbGFzcyBWTTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBBdXhpbGlhcnlCYXJyaWVy
IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFQgVHlwZTsKKyAgICAKICAgICBBdXhpbGlhcnlCYXJy
aWVyKCk6IG1fdmFsdWUoKSB7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMu
aAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uYXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGUoc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC03MCw3ICs3MCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dHJ5Q3JlYXRl
KFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6
ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFz
ZSA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGJhc2Ug
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShzaXplKTsKICAg
ICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAt
MTQ4LDcgKzE0OCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkK
ICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hl
YWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXpl
ID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5
QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgIGlmICghbmV3QmFzZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hv
dWxkbid0IGJlIGEgbWVtY3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FnZWRCYXJyaWVyUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5
QmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSlNDZWxsOworY2xhc3MgVk07CisKKy8vIFRoaXMgaXMgYSBjb252ZW5pZW50IGNv
bWJvIG9mIEF1eGlsaWFyeUJhcnJpZXIgYW5kIENhZ2VkUHRyLgorCit0ZW1wbGF0ZTxHaWdhY2Fn
ZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBUPgorY2xhc3MgQ2FnZWRCYXJyaWVyUHRyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpLaW5kIGtpbmQgPSBwYXNz
ZWRLaW5kOworICAgIHR5cGVkZWYgVCBUeXBlOworICAgIAorICAgIENhZ2VkQmFycmllclB0cigp
IHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQ2FnZWRCYXJyaWVyUHRy
KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBtX2JhcnJp
ZXIuc2V0KHZtLCBjZWxsLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbGVhcigpIHsgbV9iYXJyaWVyLmNsZWFyKCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9i
YXJyaWVyLmdldCgpLmdldCgpOyB9CisgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QgeyByZXR1
cm4gbV9iYXJyaWVyLmdldCgpLmdldE1heUJlTnVsbCgpOyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhZ2VkQmFycmllclB0ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZ2V0TWF5QmVOdWxsKCkgPT0gb3RoZXIuZ2V0TWF5QmVOdWxsKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDYWdlZEJhcnJpZXJQdHImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAg
ICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAqdGhpcyAhPSBDYWdlZEJhcnJpZXJQdHIoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFUmJiB2YWx1ZSkgeyBt
X2JhcnJpZXIuc2V0V2l0aG91dEJhcnJpZXIoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7IH0KKyAg
ICAKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBUKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbmRleFR5cGU+CisgICAgVCYgb3BlcmF0b3JbXShJbmRleFR5cGUgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGdldCgpW2luZGV4XTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBBdXhpbGlh
cnlCYXJyaWVyPENhZ2VkUHRyPGtpbmQsIFQ+PiBtX2JhcnJpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcg
KzExOCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIERv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3lt
Ym9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIERvbnRFbnVt
KTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlB
bGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9
IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkudHJ5QWxs
b2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5n
U3RvcmUpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5n
U3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3NJ
Zk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVk
IGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnkodm0pOwotICAgIG1fbWFw
cGVkQXJndW1lbnRzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgbV9tYXBwZWRBcmd1bWVudHNb
aW5kZXhdID0gdHJ1ZTsKIH0KIAogdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDkgKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQXV4
aWxpYXJ5QmFycmllci5oIgorI2luY2x1ZGUgIkNhZ2VkQmFycmllclB0ci5oIgogI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50c09mZnNldC5oIgogI2luY2x1ZGUgIkdlbmVyaWNBcmd1bWVudHMuaCIK
KyNpbmNsdWRlIDx3dGYvQ2FnZWRQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTczLDcg
Kzc0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJf
dCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFw
cGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFyZ3VtZW50cy5nZXQoKVtpXSk7CisgICAgICAgIHJl
dHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3VtZW50cyB8fCAhbV9tYXBwZWRBcmd1
bWVudHNbaV0pOwogICAgIH0KIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudEluREZHKHVpbnQz
Ml90IGkpIGNvbnN0CkBAIC0xNjQsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5
cyB0aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQg
d2FzIHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgdWludDMyX3QgbV9taW5D
YXBhY2l0eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2Fw
YWNpdHkgb2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBt
YXliZSBzb21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5k
IHRvIHRoZSBKSVRzLgotICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+IG1fbWFwcGVkQXJndW1l
bnRzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNh
bGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCisgICAgQ2FnZWRCYXJyaWVy
UHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+IG1fbWFwcGVkQXJndW1lbnRzOyAvLyBJZiBu
b24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVs
bHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ2FnZWRCYXJyaWVyUHRyLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02MCw3ICs2MSw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgCi0gICAg
QXV4aWxpYXJ5QmFycmllcjxib29sKj4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7Cisg
ICAgQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+IG1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsy
NjEsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChh
cmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7
CisgICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uo
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCkudHJ5QWxsb2NhdGUoV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YmFja2luZ1N0b3JlKTsKICAgICAgICAgYm9vbCogbW9kaWZpZWRBcmd1bWVudHMgPSBzdGF0aWNf
Y2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3VtZW50cyk7CkBAIC0yODIsNyArMjgy
LDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpzZXRNb2RpZmllZAogewogICAgIGlu
aXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JJZk5lY2Vzc2FyeSh2bSwgbGVuZ3RoKTsKICAg
ICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlw
dG9yLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNj
cmlwdG9yW2luZGV4XSA9IHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0y
OTEsNyArMjkxLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQQog
ICAgIGlmICghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvci5nZXQoKVtpbmRleF07CisgICAgICAgIHJldHVybiBtX21vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvcltpbmRleF07CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShy
ZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBIYXNoTWFwSW1w
bDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaAogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1faGVhZCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWlsKTsKICAgICAK
LSAgICBpZiAoSGFzaE1hcEJ1ZmZlclR5cGUqIGJ1ZmZlciA9IHRoaXNPYmplY3QtPm1fYnVmZmVy
LmdldCgpKQorICAgIGlmIChIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0gdGhpc09iamVjdC0+
bV9idWZmZXIuZ2V0TWF5QmVOdWxsKCkpCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShi
dWZmZXIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRp
b25TaXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmF1eGlsaWFyeVNwYWNl
LnRyeUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsK
ICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMDIsNyArMzAy
LDcgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1
ZmZlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZl
cigpOworICAgICAgICByZXR1cm4gbV9idWZmZXItPmJ1ZmZlcigpOwogICAgIH0KIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCkBAIC01OTEsNyArNTkx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZXhlYywgdm0p
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLmdldCgpLT5yZXNldChtX2NhcGFjaXR5
KTsKKyAgICAgICAgICAgIG1fYnVmZmVyLT5yZXNldChtX2NhcGFjaXR5KTsKICAgICAgICAgICAg
IGFzc2VydEJ1ZmZlcklzRW1wdHkoKTsKICAgICAgICAgfQogCkBAIC02NTUsNyArNjU1LDcgQEAg
cHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV9oZWFkOwog
ICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV90YWlsOwotICAgIEF1eGlsaWFy
eUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGUqPiBtX2J1ZmZlcjsKKyAgICBDYWdlZEJhcnJpZXJQ
dHI8R2lnYWNhZ2U6OkpTVmFsdWUsIEhhc2hNYXBCdWZmZXJUeXBlPiBtX2J1ZmZlcjsKICAgICB1
aW50MzJfdCBtX2tleUNvdW50OwogICAgIHVpbnQzMl90IG1fZGVsZXRlQ291bnQ7CiAgICAgdWlu
dDMyX3QgbV9jYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU0FycmF5
KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXNDb250
aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0
aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwor
ICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5
QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxp
bmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRP
ZkxpbmVTdG9yYWdlKTsKQEAgLTk4LDcgKzk4LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBBcnJh
eVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGluaXRp
YWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxs
b2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91
dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
KSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4
Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rv
ckxlbmd0aCkpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjAsNyArMzYwLDcgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWRO
ZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9
IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICBuZXdBbGxv
Y0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdT
aXplKTsKICAgICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKQEAgLTU1
MCw3ICs1NTAsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
LmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0TWF5QmVOdWxsKCk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXlDbGFzczoKICAgICAgICAgaWYgKCFuZXdMZW5ndGgpCkBAIC02MjAsNyArNjIwLDcgQEAg
SlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwog
ICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6
CkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKQEAgLTg5MCw5ICs4OTAsOSBAQCBKU0FycmF5KiBK
U0FycmF5OjpmYXN0U2xpY2UoRXhlY1N0YXRlJiBlCiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0
dGVyZmx5ID0gKnJlc3VsdEFycmF5LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlw
ZSA9PSBBcnJheVdpdGhEb3VibGUpCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5
LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwor
ICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0
YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgs
IHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVt
Y3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQo
KS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNv
dW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRh
dGEoKSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXpl
b2YoSlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIHJlc3VsdEJ1dHRlcmZseS5zZXRQdWJsaWNM
ZW5ndGgoY291bnQpOwogCiAgICAgICAgIHJldHVybiByZXN1bHRBcnJheTsKQEAgLTk3MCw3ICs5
NzAsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAg
IC8vIEFkanVzdCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVk
IHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBz
dGFydCBvZiB0aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3Qg
aW5kZXhlZCBwcm9wZXJ0eSBpbiB0aGUgdXNlZAogICAgICAgICAvLyBwb3J0aW9uIG9mIHRoZSB2
ZWN0b3IuCi0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHNldEJ1
dHRlcmZseSh2bSwgYnV0dGVyZmx5KTsKICAgICAgICAgc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwpAQCAt
MTAxNSw3ICsxMDE1LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAw
KTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5
QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlC
ZU51bGwoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheUNsYXNzOgpAQCAtMTE3MSw3ICsxMTcxLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMTk0LDcgKzExOTQsNyBA
QCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdl
dE1heUJlTnVsbCgpOworICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51
bGwoKTsKIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ug
c3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAK
ICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBo
YXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCkBAIC0xMjM4LDcgKzEyMzgsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJl
TnVsbCgpOworICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3
ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5
IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxk
IGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KQEAgLTEyODEsNyArMTI4MSw3IEBAIHZv
aWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCB2ZWN0
b3JFbmQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CiAKLSAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAg
ICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTEz
NTQsNyArMTM1NCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoK
ICAgICAvLyBGSVhNRTogV2hhdCBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgY2FsbGVkIHdpdGgg
YSBSdW50aW1lQXJyYXk/IFRoZSBsZW5ndGggZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIDAg
aW4gdGhhdCBjYXNlLgogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwogCi0g
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwo
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgp
OwogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIGlubGluZSBKU0FycmF5
KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRp
Z3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9p
ZCogdGVtcCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlv
bkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBzaXplX3Qgc2l6ZSA9IHNp
emVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAg
ICAgIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShudWxscHRyLCBzaXplKTsK
KyAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRy
eUFsbG9jYXRlKG51bGxwdHIsIHNpemUpOwogICAgICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkBAIC05MCw3ICs5MCw3IEBAIEpTQXJy
YXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlbGVtZW50U2l6ZSk7Ci0gICAgbV92ZWN0b3IgPSBHaWdhY2FnZTo6dHJ5
TWFsbG9jKHNpemUpOworICAgIG1fdmVjdG9yID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBzaXplKTsKICAgICBpZiAoIW1fdmVjdG9yKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKgogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBB
U1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2Jq
ZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKICAgICBpZiAodGhpc09iamVjdC0+
bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKLSAgICAgICAgR2lnYWNhZ2U6OmZyZWUodGhp
c09iamVjdC0+bV92ZWN0b3IuZ2V0KCkpOworICAgICAgICBHaWdhY2FnZTo6ZnJlZShHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7CiB9CiAKIEpTQXJyYXlC
dWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3Ojp1bnNoYXJlZEpTQnVmZmVyKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1aXJl
TG9jaygpCiAgICAgLy8gTm90ZTogZXZlcnl0aGluZyBiZWxvdyBtdXN0IGNvbWUgYWZ0ZXIgYWRk
Q3VycmVudFRocmVhZCgpLgogICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3JhYkFsbExvY2tzKCk7
CiAgICAgCi0gICAgbV92bS0+ZmlyZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7CisgICAg
bV92bS0+ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCk7CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBs
aW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEpTT2JqZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBj
ZWxsCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFByb3BlcnR5TmFtZUVkZ2UodGhpc09iamVj
dCwgdG9WYWx1ZS5hc0NlbGwoKSwgZW50cnkua2V5KTsKICAgICB9CiAKLSAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
TWF5QmVOdWxsKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkgewogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGRhdGEgPSBudWxscHRyOwogICAgICAgICB1aW50MzJfdCBjb3VudCA9IDA7CkBA
IC02MTMsNyArNjEzLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIApAQCAtODc1LDcgKzg3NSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC04OTcsNyAr
ODk3LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAg
ICAKICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTc5LDcgKzk3OSw3
IEBAIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KHZtLCBzdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0
b3JhZ2UoKSk7CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTEwMTEsNyArMTAxMSw3IEBA
IEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JM
ZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgbGVuZ3RoKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0
ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
Q2FwYWNpdHksIGZhbHNlLCAwLAorICAgICAgICBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKSwg
dm0sIHRoaXMsIHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCiAgICAgICAg
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAgLTEwOTksNyArMTA5OSw3IEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGlu
ZGV4aW5nVHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKG9sZFR5cGUpKTsKIAotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRl
QXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBvbGRTdHJ1Y3R1cmUsIGxlbmd0aCwgdmVj
dG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKSk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMs
IG9sZFN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldE1heUJl
TnVsbCgpKTsKICAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRl
cmZseSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1dHRlcmZseSk7CkBAIC0xMTE3LDQzICsxMTE3
LDQzIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGUKIHsKICAgICBB
U1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUo
KSk7CiAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50
MzIpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwor
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKIENvbnRpZ3Vv
dXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoVk0mIHZtKQogewog
ICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
KS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5k
ZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07
KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHNldFN0
cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1
bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlz
LT5zdHJ1Y3R1cmUodm0pOwotICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCgpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNp
emUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICAKQEAgLTExNjIsNyArMTE2Miw3
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBt
ZW1jcHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eVNpemUsCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHBy
b3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlTaXplLAogICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKICAgICAKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBB
U1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmVjdG9yTGVuZ3RoOyBpLS07KQpAQCAtMTIwMyw3ICsxMjAzLDcgQEAgQ29udGlndW91
c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogewogICAgIEFTU0VSVChoYXNJbnQzMihp
bmRleGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJmJ1dHRlcmZs
eS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSogY3VycmVudEFzRG91Ymxl
ID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAg
Q29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKSk7Ci0g
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Db250aWd1b3VzKFZNJiB2bSkKQEAgLTEyMjYs
NyArMTIyNiw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMKICAg
ICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVy
biBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9u
KQpAQCAtMTIzNCw5ICsxMjM0LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydElu
dDMyVG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzSW50
MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50
cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7
CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwog
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OwpAQCAtMTI2MSw3ICsxMjYxLDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252
ZXJ0RG91YgogewogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIGRvdWJsZSog
Y3VycmVudCA9ICZidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50QXNWYWx1ZSA9IGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPihjdXJyZW50KTsKQEAgLTEyNzYsNyArMTI3Niw3IEBAIENvbnRpZ3Vv
dXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKICAgICAKICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2Nh
dGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3Vz
KCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtMTI4NCw5ICsxMjg0LDkgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVl
KSB7CkBAIC0xMzE1LDkgKzEzMTUsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
Q29udGlndW91CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXND
b250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSog
bmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7
IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKQEAgLTE0MDgsOCArMTQwOCw4IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQz
MkZvclZhbHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lk
ZWQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
aW5kZXggPCBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCkpOwotICAgIEFTU0VSVChp
bmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGlu
ZGV4IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIGNvbnZlcnRVbmRlY2lkZWRGb3JWYWx1
ZSh2bSwgdmFsdWUpOwogICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKIH0K
QEAgLTE1NzcsNyArMTU3Nyw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmEKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJh
eVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlT
dG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgp
KTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAg
ICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTg2Miw3ICsxODYyLDcg
QEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChp
IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CkBAIC0yMTY4LDcgKzIx
NjgsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKQEAgLTIz
MjUsNyArMjMyNSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHIK
IGJvb2wgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3Bh
cnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogCiAgICAgaWYgKGRlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCkBA
IC0yMzk1LDcgKzIzOTUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoCiAgICAgaWYgKGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgKFJlYWRPbmx5IHwgQWNjZXNz
b3IpKQogICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyh2bSk7CiAKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQobWFwKTsKICAgICAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KQEAgLTI0MjcsNyArMjQyNyw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRl
ZmF1bHRzKTsKIAogICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFw
LCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIGlmIChpbmRleCA+PSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5sZW5ndGgoKSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1NTks
NyArMjU1OSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAg
ICBBU1NFUlQoKGluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IGluZGV4aW5n
U2hhcGUpOwogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKIAotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICAvLyBGb3IgdXMg
dG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMg
bGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KICAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxl
bmd0aC4KQEAgLTI1ODEsNyArMjU4MSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW4KICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKS5nZXQoKTsKKyAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKIAogICAg
IFJFTEVBU0VfQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0
Y2ggKGluZGV4aW5nU2hhcGUpIHsKQEAgLTI4NjksNyArMjg2OSw3IEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZh
bHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSkpOwog
ICAgICAgICB9CkBAIC0yODgzLDcgKzI4ODMsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleFNsb3dPckJleW9uCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBt
X2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9
CkBAIC0yOTAyLDcgKzI5MDIsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dP
ckJleW9uCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0
ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0K
QEAgLTI5MTIsNyArMjkxMiw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09y
QmV5b24KIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5Lmdl
dCgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGFycmF5U3RvcmFnZSgpKTsKQEAgLTMwMTUsOCArMzAxNSw4IEBAIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGlmIChBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2VPck51bGwoKSkKICAgICAgICAgICAgIGluZGV4QmlhcyA9IHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzOwotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+
dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJs
aWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHZlY3Rvckxl
bmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKQEAgLTMxMzIsNyArMzEzMiw3IEBAIGJvb2wg
SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogYm9vbCBKU09iamVjdDo6ZW5z
dXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA8PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRl
eGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0zMTg4LDEx
ICszMTg4LDExIEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIHsK
ICAgICBBU1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIEFT
U0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5
cGUoKSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhp
bmdUeXBlKCkpKTsKLSAgICBBU1NFUlQobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
ID4gbGVuZ3RoKTsKLSAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LmdldCgpLT5pbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOworICAgIEFTU0VSVChtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkgPiBsZW5ndGgpOworICAgIEFTU0VSVCghbV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CiAKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IobGVuZ3RoKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IobGVuZ3RoKSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
bGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0zMjA2LDcgKzMyMDYsNyBAQCBCdXR0ZXJmbHkq
IEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhh
dCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5
CiAgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRo
ZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAKLSAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdy
b3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0
aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxs
KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uRm9yR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKQEAgLTM1NTIsNyArMzU1Miw3IEBAIHVpbnQzMl90
IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkg
QEAKIAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJBcnJheVN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5
LmgiCiAjaW5jbHVkZSAiQ1BVLmgiCisjaW5jbHVkZSAiQ2FnZWRCYXJyaWVyUHRyLmgiCiAjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ3Vz
dG9tR2V0dGVyU2V0dGVyLmgiCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVk0uaCIKICNp
bmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKLSNp
bmNsdWRlIDx3dGYvQ2FnZWRQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTc4LDE0ICsxNzcsMTQgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNM
ZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAg
ICB9CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCiAgICAgewogICAg
ICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JKU09iamVjdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAt
MjIxLDcgKzIyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS5nZXQoKS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yNTUsNyArMjU0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
Y2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CkBA
IC0yODEsNyArMjgwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVy
biBqc051bWJlcihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKS5hc0ludDMyKCkpOwpA
QCAtMjk5LDcgKzI5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgSlNWYWx1ZSB0cnlHZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAg
LTM1Myw3ICszNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgY2FuU2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgICAgICBzd2l0Y2ggKGlu
ZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zNzYsNyArMzc1
LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0s
IHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAg
IEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CkBAIC00MzYsNyArNDM1LDcg
QEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplSW5kZXgoT2JqZWN0
SW5pdGlhbGl6YXRpb25TY29wZSYgc2NvcGUsIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IHNjb3BlLnZtKCk7
Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQo
dm0sIGksIHYpOwpAQCAtNDkzLDcgKzQ5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBiYXJyaWVycy4g
VGhpcyBpbXBsaWVzIG5vdCBoYXZpbmcgYW55IGRhdGEgZm9ybWF0IGNvbnZlcnNpb25zLgogICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcihPYmplY3RJ
bml0aWFsaXphdGlvblNjb3BlJiwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTQyLDcgKzU0MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+
bV9zcGFyc2VNYXA7CisgICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1
OSw3ICs1NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY2OSwxMSArNjY4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICB9CiAgICAgICAgIAotICAg
IGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KCkuZ2V0TWF5QmVOdWxsKCk7IH0KLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOyB9CisgICAgY29uc3QgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwo
KTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
TWF5QmVOdWxsKCk7IH0KICAgICAKLSAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFn
ZSgpOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5
U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2Uo
KSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgIGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkgY29uc3QKICAgICB7CkBAIC04MDcsNyArODA2LDcgQEAgcHVibGljOgogICAg
IENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJbnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKICAgICAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gZW5zdXJlSW50MzJTbG93KHZtKTsKICAgICB9CkBAIC04MTksNyArODE4LDcgQEAgcHVi
bGljOgogICAgIENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURvdWJsZShWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAgICAgICAg
IAogICAgICAgICByZXR1cm4gZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAgfQpAQCAtODI5LDcg
KzgyOCw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91
cyhWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhp
bmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91cygpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KHZtKTsKICAg
ICB9CkBAIC04NDEsNyArODQwLDcgQEAgcHVibGljOgogICAgIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQW55QXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKIAogICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyh2bSk7CiAgICAgfQpAQCAtODkzLDcgKzg5Miw3IEBAIHByb3RlY3RlZDoKICAgICBBcnJheVN0
b3JhZ2UqIGFycmF5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQW55QXJyYXlT
dG9yYWdlKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8g
cHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKQEAgLTkwMiw3ICs5
MDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtOTY4LDEzICs5
NjcsMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpOwogICAgICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5
cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICAgICAgaWYgKG1f
YnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkgeworICAgICAgICBpZiAo
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAo
IWVuc3VyZUxlbmd0aFNsb3codm0sIGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVyZmx5Lmdl
dCgpLT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5Lmdl
dCgpLT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAK
QEAgLTEwNDYsNyArMTA0NSw3IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgcHJlcGFy
ZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFN0cnVjdHVyZUlELCBTdHJ1Y3R1cmUqKTsKIAogcHJvdGVjdGVkOgotICAg
IEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8QnV0dGVyZmx5Pj4gbV9idXR0ZXJmbHk7CisgICAg
Q2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpKU1ZhbHVlLCBCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5
OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fcGFkZGlu
ZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAg
ICBib29sIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJh
eVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgIHZvaWQqIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFj
ZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIGlmIChVTkxJS0VMWSghdGVtcCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjIwMzIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjUsMTUgKzE2NSwxOSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgLCBtX3J1bkxvb3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogI2VuZGlmIC8v
IFVTRShDRikKICAgICAsIGhlYXAodGhpcywgaGVhcFR5cGUpCi0gICAgLCBhdXhpbGlhcnlTcGFj
ZSgiQXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3Ry
dWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgJkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwg
JkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgZGVz
dHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9y
QXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgJkZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgc3RyaW5nU3BhY2Uo
IkpTU3RyaW5nIiwgaGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0
YW5jZSgpKQotICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IiwgaGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgp
KQotICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dl
cHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNl
KCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9y
KHN0ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCisg
ICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCisgICAgLCBqc1Zh
bHVlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlh
cnkpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGls
aWFyeSksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGNlbGxTcGFjZSgi
SlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9u
LCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRl
c3RydWN0aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRv
ckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxs
b2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBm
YXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2Uo
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
KyAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
KyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjppbnN0YW5jZSgpKQorICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
ICNlbmRpZgogICAgICwgdm1UeXBlKHZtVHlwZSkKICAgICAsIGNsaWVudERhdGEoMCkKQEAgLTIx
MSw3ICsyMTUsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBtX2NvZGVDYWNoZShzdGQ6Om1ha2VfdW5pcXVlPENvZGVDYWNoZT4oKSkKICAgICAsIG1f
YnVpbHRpbkV4ZWN1dGFibGVzKHN0ZDo6bWFrZV91bmlxdWU8QnVpbHRpbkV4ZWN1dGFibGVzPigq
dGhpcykpCiAgICAgLCBtX3R5cGVQcm9maWxlckVuYWJsZWRDb3VudCgwKQotICAgICwgbV9naWdh
Y2FnZUVuYWJsZWQoSXNXYXRjaGVkKQorICAgICwgbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQo
SXNXYXRjaGVkKQogICAgICwgbV9jb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZENvdW50KDApCiAg
ICAgLCBtX3NoYWRvd0NoaWNrZW4oc3RkOjptYWtlX3VuaXF1ZTxTaGFkb3dDaGlja2VuPigpKQog
ewpAQCAtMjkwLDcgKzI5NCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICBpbml0aWFsaXplSG9zdENhbGxSZXR1cm5WYWx1ZSgpOyAvLyBUaGlzIGlzIG5l
ZWRlZCB0byBjb252aW5jZSB0aGUgbGlua2VyIG5vdCB0byBkcm9wIGhvc3QgY2FsbCByZXR1cm4g
c3VwcG9ydC4KICNlbmRpZgogICAgIAotICAgIEdpZ2FjYWdlOjphZGREaXNhYmxlQ2FsbGJhY2so
Z2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKKyAgICBHaWdhY2FnZTo6YWRkUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhp
cyk7CiAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIApAQCAtMzU0LDcg
KzM1OCw3IEBAIFZNOjp+Vk0oKQogewogICAgIGF1dG8gZGVzdHJ1Y3Rpb25Mb2NrZXIgPSBob2xk
TG9jayhzX2Rlc3RydWN0aW9uTG9jay5yZWFkKCkpOwogICAgIAotICAgIEdpZ2FjYWdlOjpyZW1v
dmVEaXNhYmxlQ2FsbGJhY2soZ2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKKyAgICBH
aWdhY2FnZTo6cmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdl
RGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7CiAgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BS
dW5uaW5nVGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgaWYgKFdhc206OmV4
aXN0aW5nV29ya2xpc3RPck51bGwoKSkKQEAgLTQyMywyMSArNDI3LDIxIEBAIFZNOjp+Vk0oKQog
I2VuZGlmCiB9CiAKLXZvaWQgVk06OmdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBhcmd1
bWVudCkKK3ZvaWQgVk06OnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKiBh
cmd1bWVudCkKIHsKLSAgICBzdGF0aWNfY2FzdDxWTSo+KGFyZ3VtZW50KS0+Z2lnYWNhZ2VEaXNh
YmxlZCgpOworICAgIHN0YXRpY19jYXN0PFZNKj4oYXJndW1lbnQpLT5wcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkKCk7CiB9CiAKLXZvaWQgVk06OmdpZ2FjYWdlRGlzYWJsZWQoKQordm9pZCBWTTo6
cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpCiB7CiAgICAgaWYgKG1fYXBpTG9jay0+Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSkgewotICAgICAgICBtX2dpZ2FjYWdlRW5hYmxlZC5maXJl
QWxsKCp0aGlzLCAiR2lnYWNhZ2UgZGlzYWJsZWQiKTsKKyAgICAgICAgbV9wcmltaXRpdmVHaWdh
Y2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIlByaW1pdGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogIAogICAgIC8vIFRoaXMgaXMgdG90YWxseSByYWN5
LCBhbmQgdGhhdCdzIE9LLiBUaGUgcG9pbnQgaXMsIGl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZW5z
dXJlIHRoYXQgdGhleSBwYXNzIHRoZQogICAgIC8vIHVuY2FnZWQgYnVmZmVyIGluIGEgbmljZWx5
IHN5bmNocm9uaXplZCBtYW5uZXIuCi0gICAgbV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkID0g
dHJ1ZTsKKyAgICBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVlOwog
fQogCiB2b2lkIFZNOjpzZXRMYXN0U3RhY2tUb3Aodm9pZCogbGFzdFN0YWNrVG9wKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBACiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExp
c3QuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KQEAgLTk1LDYgKzk2LDggQEAgY2xhc3MgRE9NQXR0
cmlidXRlR2V0dGVyU2V0dGVyOwogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgRXhjZXB0aW9uOwog
Y2xhc3MgRXhjZXB0aW9uU2NvcGU7CitjbGFzcyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKK2NsYXNzIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKIGNsYXNzIEhhbmRs
ZVN0YWNrOwogY2xhc3MgVHlwZVByb2ZpbGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAt
Mjg1LDcgKzI4OCwzMCBAQCBwcml2YXRlOgogcHVibGljOgogICAgIEhlYXAgaGVhcDsKICAgICAK
LSAgICBTdWJzcGFjZSBhdXhpbGlhcnlTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IGZhc3RNYWxsb2NBbGxvY2F0b3I7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gcHJpbWl0aXZlR2ln
YWNhZ2VBbGxvY2F0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4ganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yOworICAgIAorICAgIFN1YnNwYWNl
IHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5n
cywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCisgICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBn
byBoZXJlLgorCisgICAgLy8gV2UgbWFrZSBjcm9zcy1jdXR0aW5nIGFzc3VtcHRpb25zIGFib3V0
IHR5cGVkIGFycmF5cyBiZWluZyBpbiB0aGUgcHJpbWl0aXZlIEdpZ2FjYWdlIGFuZCBidXR0ZXJm
bGllcworICAgIC8vIGJlaW5nIGluIHRoZSBKU1ZhbHVlIGdpZ2FjYWdlLiBGb3Igc29tZSB0eXBl
cywgaXQncyBzdXBlciBvYnZpb3VzIHdoZXJlIHRoZXkgc2hvdWxkIGdvLCBhbmQgc28gd2UKKyAg
ICAvLyBjYW4gaGFyZGNvZGUgdGhhdCBmYWN0LiBCdXQgc29tZXRpbWVzIGl0J3Mgbm90IGNsZWFy
LCBzbyB3ZSBhYnN0cmFjdCBpdCBieSBoYXZpbmcgYSBHaWdhY2FnZTo6S2luZAorICAgIC8vIGNv
bnN0YW50IHNvbWV3aGVyZS4KKyAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVy
IGlmIGV2ZXJ5b25lIGFic3RyYWN0ZWQgdGhpcz8KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ4CisgICAgQUxXQVlTX0lOTElORSBTdWJzcGFjZSYg
Z2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1pdGl2ZToKKyAg
ICAgICAgICAgIHJldHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOworICAgICAg
ICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIGpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlOworICAgIH0KICAgICAKICAgICAvLyBXaGVuZXZlciBwb3NzaWJsZSwgdXNlIHN1YnNwYWNl
Rm9yPENlbGxUeXBlPih2bSkgdG8gZ2V0IG9uZSBvZiB0aGVzZSBzdWJzcGFjZXMuCiAgICAgU3Vi
c3BhY2UgY2VsbFNwYWNlOwpAQCAtNTI0LDExICs1NTAsMTEgQEAgcHVibGljOgogICAgIHZvaWQq
IGxhc3RTdGFja1RvcCgpIHsgcmV0dXJuIG1fbGFzdFN0YWNrVG9wOyB9CiAgICAgdm9pZCBzZXRM
YXN0U3RhY2tUb3Aodm9pZCopOwogICAgIAotICAgIHZvaWQgZmlyZUdpZ2FjYWdlRW5hYmxlZElm
TmVjZXNzYXJ5KCkKKyAgICB2b2lkIGZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vz
c2FyeSgpCiAgICAgewotICAgICAgICBpZiAobV9uZWVkVG9GaXJlR2lnYWNhZ2VFbmFibGVkKSB7
Ci0gICAgICAgICAgICBtX25lZWRUb0ZpcmVHaWdhY2FnZUVuYWJsZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIG1fZ2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJHaWdhY2FnZSBkaXNhYmxl
ZCBhc3luY2hyb25vdXNseSIpOworICAgICAgICBpZiAobV9uZWVkVG9GaXJlUHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKSB7CisgICAgICAgICAgICBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2Fn
ZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVk
LmZpcmVBbGwoKnRoaXMsICJQcmltaXRpdmUgZ2lnYWNhZ2UgZGlzYWJsZWQgYXN5bmNocm9ub3Vz
bHkiKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjMzLDcgKzY1OSw3IEBAIHB1YmxpYzoKICAg
ICAvLyBGSVhNRTogVXNlIEF0b21pY1N0cmluZyBvbmNlIGl0IGdvdCBtZXJnZWQgd2l0aCBJZGVu
dGlmaWVyLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29u
c3QgU3RyaW5nJik7CiAgICAgCi0gICAgSW5saW5lV2F0Y2hwb2ludFNldCYgZ2lnYWNhZ2VFbmFi
bGVkKCkgeyByZXR1cm4gbV9naWdhY2FnZUVuYWJsZWQ7IH0KKyAgICBJbmxpbmVXYXRjaHBvaW50
U2V0JiBwcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX3ByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZDsgfQogCiAgICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJs
ZXMoKSB7IHJldHVybiBtX2J1aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCkBAIC03NDEsOCAr
NzY3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRpb25FdmVudExvY2F0aW9uJik7CiAjZW5kaWYK
ICAgICAKLSAgICBzdGF0aWMgdm9pZCBnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOwot
ICAgIHZvaWQgZ2lnYWNhZ2VEaXNhYmxlZCgpOworICAgIHN0YXRpYyB2b2lkIHByaW1pdGl2ZUdp
Z2FjYWdlRGlzYWJsZWRDYWxsYmFjayh2b2lkKik7CisgICAgdm9pZCBwcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkKCk7CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5Vc2VB
c3NlbWJsZXI7CkBAIC03ODcsOCArODEzLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZVByb2ZpbGVyPiBtX3R5cGVQcm9maWxlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVByb2ZpbGVyTG9nPiBtX3R5cGVQcm9maWxlckxvZzsKICAgICB1bnNpZ25lZCBtX3R5cGVQcm9m
aWxlckVuYWJsZWRDb3VudDsKLSAgICBib29sIG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5hYmxlZCB7
IGZhbHNlIH07Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2dpZ2FjYWdlRW5hYmxlZDsKKyAg
ICBib29sIG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCB7IGZhbHNlIH07Cisg
ICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAgICBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9maWxl
cjsKICAgICB1bnNpZ25lZCBtX2NvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkQ291bnQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24gMjIw
MzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAobV9t
ZW1vcmllcy5zaXplKCkgPj0gbV9tYXhDb3VudCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWVt
b3J5UmVzdWx0KG51bGxwdHIsIE1lbW9yeVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICB2b2lk
KiByZXN1bHQgPSBHaWdhY2FnZTo6dHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gTWVtb3J5UmVzdWx0KG51bGxwdHIsIE1lbW9y
eVJlc3VsdDo6U3luY0dDQW5kUmV0cnkpOwogICAgICAgICAgICAgCkBAIC0xMjEsNyArMTIxLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBob2xkZXIgPSBo
b2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVWaXJ0dWFsUGFnZXMo
YmFzZVB0ciwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CisgICAgICAgICAgICBHaWdhY2Fn
ZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlUHRyLCBNZW1vcnk6
OmZhc3RNYXBwZWRCeXRlcygpKTsKICAgICAgICAgICAgIG1fbWVtb3JpZXMucmVtb3ZlRmlyc3Qo
YmFzZVB0cik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zMTIsNyArMzEyLDcgQEAgUmVmUHRy
PE1lbW9yeT4gTWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBQYQogICAgIGlmICghaW5pdGlhbEJ5dGVz
KQogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeShpbml0aWFsLCBtYXhpbXVtKSk7
CiAgICAgCi0gICAgdm9pZCogc2xvd01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9j
KFdURjo6cGFnZVNpemUoKSwgaW5pdGlhbEJ5dGVzKTsKKyAgICB2b2lkKiBzbG93TWVtb3J5ID0g
R2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdl
U2l6ZSgpLCBpbml0aWFsQnl0ZXMpOwogICAgIGlmICghc2xvd01lbW9yeSkgewogICAgICAgICBt
ZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMoaW5pdGlhbEJ5dGVzKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zMzEsNyArMzMxLDcgQEAgTWVtb3J5Ojp+TWVtb3J5KCkKICAg
ICAgICAgICAgIG1lbW9yeU1hbmFnZXIoKS5mcmVlVmlydHVhbFBhZ2VzKG1fbWVtb3J5KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
OgotICAgICAgICAgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKG1fbWVtb3J5KTsKKyAgICAgICAg
ICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX21lbW9yeSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTM3OCwxMyArMzc4LDEz
IEBAIGJvb2wgTWVtb3J5Ojpncm93KFZNJiB2bSwgUGFnZUNvdW50IG5ld1MKICAgICBjYXNlIE1l
bW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1heGlt
dW0oKS5ieXRlcygpICE9IDApOwogICAgICAgICAKLSAgICAgICAgdm9pZCogbmV3TWVtb3J5ID0g
R2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoV1RGOjpwYWdlU2l6ZSgpLCBkZXNpcmVkU2l6ZSk7
CisgICAgICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdp
Z2FjYWdlOjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgZGVzaXJlZFNpemUpOwogICAgICAg
ICBpZiAoIW5ld01lbW9yeSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbWVt
Y3B5KG5ld01lbW9yeSwgbV9tZW1vcnksIG1fc2l6ZSk7CiAgICAgICAgIG1lbXNldChzdGF0aWNf
Y2FzdDxjaGFyKj4obmV3TWVtb3J5KSArIG1fc2l6ZSwgMCwgZGVzaXJlZFNpemUgLSBtX3NpemUp
OwogICAgICAgICBpZiAobV9tZW1vcnkpCi0gICAgICAgICAgICBHaWdhY2FnZTo6YWxpZ25lZEZy
ZWUobV9tZW1vcnkpOworICAgICAgICAgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKEdpZ2FjYWdl
OjpQcmltaXRpdmUsIG1fbWVtb3J5KTsKICAgICAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAg
ICAgICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICAgICAgbV9zaXplID0g
ZGVzaXJlZFNpemU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0wOC0wNiAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFByaW1pdGl2ZSBhdXhpbGlhcmll
cyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBnaWdhY2FnZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkxOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBtaXJyb3JzIHRoZSBjaGFuZ2VzIGZyb20gYm1hbGxvYy9HaWdhY2FnZS5oLgorICAgICAg
ICAKKyAgICAgICAgQWxzbyBpdCB0ZWFjaGVzIENhZ2VkUHRyIGhvdyB0byByZWFzb24gYWJvdXQg
bXVsdGlwbGUgZ2lnYWNhZ2VzLgorCisgICAgICAgICogd3RmL0NhZ2VkUHRyLmg6CisgICAgICAg
IChXVEY6OkNhZ2VkUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6b3Bl
cmF0b3JbXSBjb25zdCk6CisgICAgICAgICogd3RmL0dpZ2FjYWdlLmNwcDoKKyAgICAgICAgKEdp
Z2FjYWdlOjp0cnlNYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6OnRyeUFsbG9jYXRlVmlydHVh
bFBhZ2VzKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlVmlydHVhbFBhZ2VzKToKKyAgICAgICAg
KEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKToKKyAgICAgICAgKEdpZ2FjYWdlOjphbGlnbmVk
RnJlZSk6CisgICAgICAgIChHaWdhY2FnZTo6ZnJlZSk6CisgICAgICAgICogd3RmL0dpZ2FjYWdl
Lmg6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKToKKyAgICAg
ICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2spOgorICAgICAgICAoR2ln
YWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6CisgICAgICAgIChHaWdhY2Fn
ZTo6bmFtZSk6CisgICAgICAgIChHaWdhY2FnZTo6YmFzZVB0cik6CisgICAgICAgIChHaWdhY2Fn
ZTo6Y2FnZWQpOgorICAgICAgICAoR2lnYWNhZ2U6OmlzQ2FnZWQpOgorICAgICAgICAoR2lnYWNh
Z2U6OnRyeUFsaWduZWRNYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6OmFsaWduZWRGcmVlKToK
KyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlKToKKyAgICAgICAgKEdpZ2FjYWdlOjpkaXNhYmxlR2ln
YWNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6cmVtb3ZlRGlzYWJsZUNhbGxiYWNrKTogRGVs
ZXRlZC4KKwogMjAxNy0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04gKHIyMTk4OTUtMjE5ODk3KTogTnVtYmVyIG9mIGxlYWtzIG9uIE9w
ZW4gU291cmNlIHdlbnQgZnJvbSA5MjQwIHRvIDIzNTk4MyBhbmQgaXMgbm93IGF0IDMwMjM3MgpJ
bmRleDogU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9DYWdlZFB0ci5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9DYWdl
ZFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSwxMSBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBhc3Nl
ZEtpbmQsIHR5cGVuYW1lIFQ+CiBjbGFzcyBDYWdlZFB0ciB7CiBwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAgICAKICAgICBD
YWdlZFB0cihUKiBwdHIgPSBudWxscHRyKQogICAgICAgICA6IG1fcHRyKHB0cikKICAgICB7CkBA
IC00MCw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBUKiBnZXQoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpjYWdlZChtX3B0cik7
CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQoa2luZCwgbV9wdHIpOwogICAgIH0KICAg
ICAKICAgICBUKiBnZXRNYXlCZU51bGwoKSBjb25zdApAQCAtNjcsNiArNjksOSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CiAgICAg
VCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbmRleFR5cGU+CisgICAgVCYgb3BlcmF0b3JbXShJbmRleFR5cGUgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGdldCgpW2luZGV4XTsgfQogICAgIAogcHJpdmF0ZToKICAgICBUKiBtX3B0
cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9XVEYv
d3RmL0dpZ2FjYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjb25zdCB2
b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAotdm9pZCog
dHJ5TWFsbG9jKHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXpl
KQogewogICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhzaXplKTsKICAgICB2b2lkKiBy
ZWFsUmVzdWx0OwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6
ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFn
ZXMoc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXpl
X3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZChz
aXplKTsKIH0KIAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBz
aXplKQordm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBz
aXplKQogewogICAgIE9TQWxsb2NhdG9yOjpyZWxlYXNlRGVjb21taXR0ZWQoYmFzZVB0ciwgc2l6
ZSk7CiB9CkBAIC02Nyw0MiArNjcsNTEgQEAgbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIC8vIGFuZCBz
dGF5IHNjcmFtYmxlZCBleGNlcHQganVzdCBiZWZvcmUgdXNlLgogLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAzNQogCi12b2lkKiB0cnlBbGlnbmVkTWFsbG9j
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhL
aW5kIGtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJl
c3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBibWFsbG9j
OjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6
dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAg
ICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBh
bGlnbmVkRnJlZSh2b2lkKiBwKQordm9pZCBhbGlnbmVkRnJlZShLaW5kIGtpbmQsIHZvaWQqIHAp
CiB7Ci0gICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2Fn
ZSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQoaXND
YWdlZChraW5kLCBwKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OmhlYXBL
aW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAotdm9pZCogdHJ5TWFs
bG9jKHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1h
bGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjph
cGk6OnRyeU1hbGxvYyhzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpj
b21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBmcmVlKHZvaWQq
IHApCit2b2lkIGZyZWUoS2luZCBraW5kLCB2b2lkKiBwKQogewotICAgIGJtYWxsb2M6OmFwaTo6
ZnJlZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIGlmICghcCkKKyAgICAg
ICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FnZWQoa2luZCwgcCkpOworICAgIGJt
YWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpj
b21waWxlckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKHNpemVf
dCBzaXplKQordm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCBraW5kLCBzaXplX3Qg
c2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxp
Z25WaXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2Fj
YWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25W
aXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwog
ICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
ZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3QpCit2b2lkIGZyZWVWaXJ0dWFs
UGFnZXMoS2luZCBraW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3QpCiB7Ci0gICAgYm1hbGxvYzo6
YXBpOjpmcmVlTGFyZ2VWaXJ0dWFsKGJhc2VQdHIsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2Fn
ZSk7CisgICAgaWYgKCFiYXNlUHRyKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNDYWdlZChraW5kLCBiYXNlUHRyKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlTGFyZ2VW
aXJ0dWFsKGJhc2VQdHIsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBp
bGVyRmVuY2UoKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNSArMzcsNDcg
QEAgZXh0ZXJuIFdURl9FWFBPUlREQVRBIGNvbnN0IHZvaWQqIGdfZ2lnYQogCiBuYW1lc3BhY2Ug
R2lnYWNhZ2UgewogCitlbnVtIEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVlCit9
OworCiBpbmxpbmUgdm9pZCBlbnN1cmVHaWdhY2FnZSgpIHsgfQotaW5saW5lIHZvaWQgZGlzYWJs
ZUdpZ2FjYWdlKCkgeyB9CitpbmxpbmUgdm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKSB7
IH0KIGlubGluZSBib29sIHNob3VsZEJlRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWlu
bGluZSB2b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0K
LWlubGluZSB2b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQq
KSB7IH0KK2lubGluZSB2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2
b2lkKiksIHZvaWQqKSB7IH0KK2lubGluZSB2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxs
YmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0KKworQUxXQVlTX0lOTElORSBjb25zdCBj
aGFyKiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFBy
aW1pdGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOworICAgIGNhc2UgSlNWYWx1ZToK
KyAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
KiYgYmFzZVB0cihLaW5kKQoreworICAgIHJldHVybiBnX2dpZ2FjYWdlQmFzZVB0cjsKK30KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiBjYWdlZChUKiBwdHIpIHsgcmV0dXJuIHB0
cjsgfQoraW5saW5lIFQqIGNhZ2VkKEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9CiAKLWlu
bGluZSBib29sIGlzQ2FnZWQoY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUg
Ym9vbCBpc0NhZ2VkKEtpbmQsIGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogCi1pbmxp
bmUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkg
eyByZXR1cm4gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsgfQotaW5saW5l
IHZvaWQgYWxpZ25lZEZyZWUodm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7IH0KLVdURl9F
WFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpOwotaW5saW5lIHZvaWQg
ZnJlZSh2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CitpbmxpbmUgdm9pZCogdHJ5QWxpZ25lZE1h
bGxvYyhLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gdHJ5RmFz
dEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsgfQoraW5saW5lIHZvaWQgYWxpZ25lZEZy
ZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7IH0KK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90IHNpemUpOworaW5saW5lIHZvaWQgZnJl
ZShLaW5kLCB2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsK
K1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBz
aXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtp
bmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBuYW1lc3BhY2UgR2lnYWNh
Z2UKICNlbHNlCkBAIC02MywxMyArODUsMTMgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJl
ZVZpcnR1YWxQYWdlcwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGlnbmVkRnJlZSh2b2lkKik7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmcmVlKHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGlnbmVkTWFsbG9j
KEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGFsaWduZWRGcmVlKEtpbmQsIHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWUo
S2luZCwgdm9pZCopOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0
dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1
YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUpOworV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRyLCBz
aXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA4LTA2ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUHJpbWl0aXZlIGF1eGlsaWFyaWVzIGFuZCBKU1Zh
bHVlIGF1eGlsaWFyaWVzIHNob3VsZCBoYXZlIHNlcGFyYXRlIGdpZ2FjYWdlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1
c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgQWRhcHRpbmcgdG8g
QVBJIGNoYW5nZXMgLSB3ZSBub3cgc3BlY2lmeSB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBk
aWZmZXJlbnRseSBhbmQgd2UgbmVlZCB0byBiZQorICAgICAgICBzcGVjaWZpYyBhYm91dCB3aGlj
aCBHaWdhY2FnZSB3ZSdyZSB1c2luZy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1D
bGllbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJN
ZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6R1BVQnVmZmVyKToKKwogMjAx
Ny0wOC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW0Zl
dGNoIEFQSV0gUmVzcG9uc2Ugc2hvdWxkIGtlZXAgYWxsIFJlc291cmNlUmVzcG9uc2UgaW5mb3Jt
YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCAr
NDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERh
dGEoVk0mIHZtKQogICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGlu
TmFtZXMoJnZtKQotICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBl
ciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3Ry
YWludFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmplY3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2
bS5oZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisg
ICAgLCBtX291dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBD
b25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAs
IG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmpl
Y3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9y
LmdldCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HUFVCdWZmZXJNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQkocmV2aXNpb24gMjIwMzIzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR1BVQnVmZmVyTWV0YWwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0NSwxMSBAQCBHUFVCdWZmZXI6OkdQVUJ1ZmZl
cihHUFVEZXZpY2UqIGRldmljZSwgCiAgICAgCiAgICAgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpw
YWdlU2l6ZSgpOwogICAgIHNpemVfdCBwYWdlQWxpZ25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mKHBhZ2VTaXplLCBkYXRhLT5ieXRlTGVuZ3RoKCkpOwotICAgIHZvaWQqIHBhZ2VBbGlnbmVk
Q29weSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKHBhZ2VTaXplLCBwYWdlQWxpZ25lZFNp
emUpOworICAgIHZvaWQqIHBhZ2VBbGlnbmVkQ29weSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHBhZ2VTaXplLCBwYWdlQWxpZ25lZFNpemUpOwogICAg
IGlmICghcGFnZUFsaWduZWRDb3B5KQogICAgICAgICByZXR1cm47CiAgICAgbWVtY3B5KHBhZ2VB
bGlnbmVkQ29weSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAg
ICBtX2NvbnRlbnRzID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhwYWdlQWxpZ25lZENv
cHksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgW10gKHZvaWQqIHB0cikgeyBHaWdhY2FnZTo6YWxpZ25l
ZEZyZWUocHRyKTsgfSk7CisgICAgbV9jb250ZW50cyA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9t
Qnl0ZXMocGFnZUFsaWduZWRDb3B5LCBkYXRhLT5ieXRlTGVuZ3RoKCksIFtdICh2b2lkKiBwdHIp
IHsgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHB0cik7IH0pOwog
ICAgIG1fY29udGVudHMtPnJlZigpOwogICAgIEFycmF5QnVmZmVyKiBjYXB0dXJlZENvbnRlbnRz
ID0gbV9jb250ZW50cy5nZXQoKTsKICAgICBtX2J1ZmZlciA9IGFkb3B0TlMoKE1UTEJ1ZmZlciAq
KVtkZXZpY2UtPnBsYXRmb3JtRGV2aWNlKCkgbmV3QnVmZmVyV2l0aEJ5dGVzTm9Db3B5Om1fY29u
dGVudHMtPmRhdGEoKSBsZW5ndGg6cGFnZUFsaWduZWRTaXplIG9wdGlvbnM6TVRMUmVzb3VyY2VP
cHRpb25DUFVDYWNoZU1vZGVEZWZhdWx0IGRlYWxsb2NhdG9yOl4odm9pZCosIE5TVUludGVnZXIp
IHsgY2FwdHVyZWRDb250ZW50cy0+ZGVyZWYoKTsgfV0pOwpJbmRleDogU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTctMDgtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBQcmltaXRpdmUgYXV4aWxpYXJpZXMgYW5kIEpTVmFsdWUgYXV4aWxpYXJpZXMg
c2hvdWxkIGhhdmUgc2VwYXJhdGUgZ2lnYWNhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBkaXNhYmxlIGNhbGxiYWNrIGlzIGFs
bCBhYm91dCB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6Om1fd2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKToKKyAgICAg
ICAgKFdlYktpdDo6Z2lnYWNhZ2VEaXNhYmxlZCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMDUgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFdlYkRy
aXZlcjogSW1wbGVtZW50IHBhZ2UgbG9hZCBzdHJhdGVneQpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2
LDcgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgbm9uVmlzaWJsZVByb2Nlc3NDbAogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotc3RhdGljIHZvaWQgZ2lnYWNhZ2VEaXNhYmxlZCh2b2lkKikKK3N0YXRp
YyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCiB7CiAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC0yMDMsNyArMjAzLDcgQEAgV2ViUHJvY2Vzczo6V2Vi
UHJvY2VzcygpCiAgICAgfSk7CiAKICAgICBpZiAoR2lnYWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgp
KQotICAgICAgICBHaWdhY2FnZTo6YWRkRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWQs
IG51bGxwdHIpOworICAgICAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
KHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQsIG51bGxwdHIpOwogfQogCiBXZWJQcm9jZXNzOjp+
V2ViUHJvY2VzcygpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzMjQpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAxNy0w
OC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFByaW1pdGl2
ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2ZSBzZXBhcmF0
ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpbnRyb2R1Y2VzIHR3byBraW5kcyBvZiBHaWdhY2FnZSwgUHJpbWl0
aXZlIGFuZCBKU1ZhbHVlLiBUaGlzIHRyYW5zbGF0ZXMgdG8gdHdvIGtpbmRzIG9mCisgICAgICAg
IEhlYXBLaW5kLCBQcmltaXRpdmVHaWdhY2FnZSBhbmQgSlNWYWx1ZUdpZ2FjYWdlLgorICAgICAg
ICAKKyAgICAgICAgVGhlIG5ldyBzdXBwb3J0IGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgdHVybmlu
ZyBJbmxpbmUuaCBpbnRvIEJJbmxpbmUuaCwgYW5kIElOTElORSBpbnRvIEJJTkxJTkUsIGFuZAor
ICAgICAgICBOT19JTkxJTkUgaW50byBCTk9fSU5MSU5FLgorCisgICAgICAgICogYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2Up
OgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IpOgorICAgICAg
ICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3MpOgorICAgICAgICAqIGJtYWxsb2MvQXN5
bmNUYXNrLmg6CisgICAgICAgICogYm1hbGxvYy9CSW5saW5lLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmguCisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6Cisg
ICAgICAgIChibWFsbG9jOjpDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkNhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgorICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAqIGJtYWxsb2MvR2lnYWNh
Z2UuY3BwOgorICAgICAgICAoR2lnYWNhZ2U6OlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OlBy
aW1pdGl2ZURpc2FibGVDYWxsYmFja3MpOgorICAgICAgICAoR2lnYWNhZ2U6OmVuc3VyZUdpZ2Fj
YWdlKToKKyAgICAgICAgKEdpZ2FjYWdlOjpkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UpOgorICAg
ICAgICAoR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6CisgICAgICAgIChH
aWdhY2FnZTo6cmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKToKKyAgICAgICAgKEdpZ2Fj
YWdlOjpDYWxsYmFja3M6OkNhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6
ZGlzYWJsZUdpZ2FjYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEdpZ2FjYWdlOjphZGREaXNhYmxl
Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxs
YmFjayk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9HaWdhY2FnZS5oOgorICAgICAgICAo
R2lnYWNhZ2U6Om5hbWUpOgorICAgICAgICAoR2lnYWNhZ2U6OmJhc2VQdHIpOgorICAgICAgICAo
R2lnYWNhZ2U6OmZvckVhY2hLaW5kKToKKyAgICAgICAgKEdpZ2FjYWdlOjpjYWdlZCk6CisgICAg
ICAgIChHaWdhY2FnZTo6aXNDYWdlZCk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dXNp
bmdHaWdhY2FnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpnaWdhY2FnZUJhc2VQdHIpOgor
ICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvSGVhcEtpbmQuaDoK
KyAgICAgICAgKGJtYWxsb2M6OmlzR2lnYWNhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6Z2lnYWNh
Z2VLaW5kKToKKyAgICAgICAgKGJtYWxsb2M6OmhlYXBLaW5kKToKKyAgICAgICAgKiBibWFsbG9j
L0lubGluZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxsb2MvTWFwLmg6CisgICAgICAgICog
Ym1hbGxvYy9QZXJQcm9jZXNzLmg6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzPFQ+Ojpn
ZXRGYXN0Q2FzZSk6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzPFQ+OjpnZXQpOgorICAg
ICAgICAoYm1hbGxvYzo6UGVyUHJvY2VzczxUPjo6Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJt
YWxsb2MvUGVyVGhyZWFkLmg6CisgICAgICAgIChibWFsbG9jOjpQZXJUaHJlYWQ8VD46OmdldEZh
c3RDYXNlKToKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxvYzo6
VmVjdG9yPFQ+OjpwdXNoKToKKyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6c2hyaW5rQ2Fw
YWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+Ojpncm93Q2FwYWNpdHkpOgorCiAy
MDE3LTA4LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSWYg
R2lnYWNhZ2UgaXMgZGlzYWJsZWQsIGJtYWxsb2Mgc2hvdWxkIHNlcnZpY2UgbGFyZ2UgYWxpZ25l
ZCBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIHZtQWxsb2NhdGUKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCQkxNERENzhDNjE4
RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRE
RDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNz
ZXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ5REI0NTE3RjI0NDcxMDBFQUFCNzkg
LyogRml4ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4OURDRTFFMDA1
NDZENjggLyogSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYwMTg5RENFMUUw
MDU0NkQ2OCAvKiBCSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAyIC8qIE11dGV4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDREQ0VENjE3QTY0OUQ5
MDA5M0IyRjIgLyogTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzhDQjE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyUHJvY2Vzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDZBMDcxN0E2
MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQzE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0
NjlGRDE3QTYxRjFGMDBGOUVBMUQgLyogUGVyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk0LDcgKzk0LDcgQEAKIAkJMTQwRkEwMDIx
OUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcFJhbmdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0
YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGluZU1ldGFkYXRhLmg7
IHBhdGggPSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0VHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlLmNwcDsgcGF0aCA9IGJtYWxs
b2MvT2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTNFNDYw
MTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0JJ
bmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjIxODlERTFDRDAw
NTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5l
RW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcEFs
bG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVFREU0
MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
QXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3NlcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRoID0gYm1hbGxvYy9TeXNjYWxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcsMTAgKzI4NywxMCBAQAogCQkJ
CTY1OTlDNUNCMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCAqLywKIAkJCQkx
NDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovLAogCQkJCTBGNUJGMTcyMUYy
M0M1NzEwMDI5RDkxRCAvKiBCRXhwb3J0LmggKi8sCisJCQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2
RDY4IC8qIEJJbmxpbmUuaCAqLywKIAkJCQkxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMgLyogQlBs
YXRmb3JtLmggKi8sCiAJCQkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9y
LmggKi8sCiAJCQkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi8sCi0J
CQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovLAogCQkJCTE0MUQ5QUZG
MUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8sCiAJCQkJNDQyNkUyN0UxQzgzOEVFMDAwOEVC
MDQyIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0MiAvKiBM
b2dnaW5nLmggKi8sCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5
NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlD
MTMwMDExNUM5NyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCRjE0OTFGMjJBOEQ4
MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3OEM5MThG
NDhENzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0REQ3OEM5MThG
NDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRDMDdGNTFD
N0I3MDI2MDA1MUJCNkEgLyogTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qzg5OTJE
MUNDNTc4MzMwMDI3QTA1NyAvKiBMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBG
QTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ5LDcgKzE0OSw3IEBAIHZvaWQgQWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiAgICAgfQogfQogCi1O
T19JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKK0JOT19JTkxJTkUgdm9pZCBBbGxv
Y2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwg
c2l6ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUg
PSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgTk9f
SU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0bwogICAgIG1faGVhcC5hbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2Fj
aGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKGxvY2spKTsKIH0KIAotSU5MSU5FIHZvaWQgQWxs
b2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qg
c2l6ZUNsYXNzKQorQklOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEJ1bXBB
bGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogICAg
IGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQpAQCAtMTY2LDEzICsxNjYsMTMgQEAgSU5MSU5F
IHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQgogICAgIHJldHVybiBhbGxvY2F0b3Iu
cmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQWxsb2Nh
dG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKICAgICByZXR1cm4gbV9oZWFwLmFsbG9j
YXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCiB7CiAgICAg
c2l6ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhzaXplKTsKICAgICBCdW1wQWxs
b2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc107CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHJldmlzaW9uIDIyMDMyMykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgQXN5bmNUYXNrX2gKIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRl
ICJJbmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNp
bmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgPGF0b21pYz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QklubGluZS5oCShyZXZpc2lvbiAyMjAzMjMpCShmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SW5saW5lLmg6MjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGluZV9oCisjZGVmaW5lIElubGluZV9oCisK
KyNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKKwor
I2RlZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorCisjZW5kaWYgLy8g
SW5saW5lX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCShyZXZpc2lvbiAyMjAzMjMp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTEgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElubGluZV9o
Ci0jZGVmaW5lIElubGluZV9oCisjaWZuZGVmIEJJbmxpbmVfaAorI2RlZmluZSBCSW5saW5lX2gK
IAotI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlubGluZQor
I2RlZmluZSBCSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKIAot
I2RlZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBCTk9f
SU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIAotI2VuZGlmIC8vIElubGluZV9oCisj
ZW5kaWYgLy8gQklubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcAkocmV2aXNp
b24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRl
ICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5j
bHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CkBAIC00NiwyNyArNDYsMjcgQEAgQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5k
KQogewogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxs
Q2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBD
YWNoZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6
ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+Ojpn
ZXRTbG93Q2FzZSgpLT5hdChoZWFwS2luZCkuYWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoc2l6ZSk7
CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShI
ZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjph
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkK
IHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNl
KCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAotTk9fSU5M
SU5FIHZvaWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBL
aW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2Fj
aGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtp
bmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9j
YXRlKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9j
YXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKK0JO
T19JTkxJTkUgdm9pZCBDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5k
IGhlYXBLaW5kLCB2b2lkKiBvYmplY3QpCiB7CiAgICAgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENh
Y2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5kZWFsbG9jYXRvcigpLmRlYWxsb2Nh
dGUob2JqZWN0KTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nh
c2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1Np
emUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUo
SGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAg
cmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdCho
ZWFwS2luZCkuYWxsb2NhdG9yKCkucmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOwogfQpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDMyMykK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgorI2luY2x1
ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkRlYWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiRGVidWdIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUg
IklubGluZS5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIK
ICNpbmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2Fj
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNw
cAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAogLy8gRklYTUU6IEFzayBkeWxk
IHRvIHB1dCB0aGlzIGluIGl0cyBvd24gcGFnZSwgYW5kIG1wcm90ZWN0IHRoZSBwYWdlIGFmdGVy
IHdlIGVuc3VyZSB0aGUgZ2lnYWNhZ2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0OTcyCi12b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK3ZvaWQqIGdfcHJp
bWl0aXZlR2lnYWNhZ2VCYXNlUHRyOwordm9pZCogZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwog
CiB1c2luZyBuYW1lc3BhY2UgYm1hbGxvYzsKIApAQCAtNTMsOCArNTQsOCBAQCBzdHJ1Y3QgQ2Fs
bGJhY2sgewogICAgIHZvaWQqIGFyZ3VtZW50IHsgbnVsbHB0ciB9OwogfTsKIAotc3RydWN0IENh
bGxiYWNrcyB7Ci0gICAgQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7
IH0KK3N0cnVjdCBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzIHsKKyAgICBQcmltaXRpdmVEaXNh
YmxlQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IH0KICAgICAKICAg
ICBWZWN0b3I8Q2FsbGJhY2s+IGNhbGxiYWNrczsKIH07CkBAIC02OSw1MiArNzAsNTcgQEAgdm9p
ZCBlbnN1cmVHaWdhY2FnZSgpCiAgICAgICAgICAgICBpZiAoIXNob3VsZEJlRW5hYmxlZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCog
YmFzZVB0ciA9IHRyeVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwgR0lHQUNBR0VfU0laRSArIEdJ
R0FDQUdFX1JVTldBWSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2VQdHIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNh
bFBhZ2VzKGJhc2VQdHIsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBnX2dpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHI7CisgICAgICAg
ICAgICBmb3JFYWNoS2luZCgKKyAgICAgICAgICAgICAgICBbJl0gKEtpbmQga2luZCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmFuZG9taXplIHdoZXJlIHRoaXMgZ29lcy4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTI0NQorICAgICAgICAgICAgICAgICAgICBiYXNlUHRyKGtpbmQpID0gdHJ5Vk1BbGxv
Y2F0ZShHSUdBQ0FHRV9TSVpFLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlUHRyKGtpbmQpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgZ2ln
YWNhZ2UuXG4iLCBuYW1lKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJDUkFTSCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKGJhc2VQdHIoa2luZCksIEdJR0FD
QUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9KTsKICNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECiB9CiAKLXZvaWQgZGlzYWJsZUdpZ2Fj
YWdlKCkKK3ZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkKIHsKICAgICBlbnN1cmVHaWdh
Y2FnZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIpIHsKKyAgICBpZiAoIWdfcHJpbWl0
aXZlR2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0IHdhcyBuZXZlciBlbmFibGVkLiBU
aGF0IG1lYW5zIHRoYXQgd2UgbmV2ZXIgZXZlbiBzYXZlZCBhbnkgY2FsbGJhY2tzLiBPciwgd2Ug
aGFkIGFscmVhZHkgZGlzYWJsZWQKICAgICAgICAgLy8gaXQgYmVmb3JlLCBhbmQgYWxyZWFkeSBj
YWxsZWQgdGhlIGNhbGxiYWNrcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBD
YWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgpOwotICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxsYmFja3M+
OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAq
UGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVD
YWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxi
YWNrcy5jYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3Vt
ZW50KTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKLSAgICBnX2dpZ2FjYWdl
QmFzZVB0ciA9IG51bGxwdHI7CisgICAgZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIgPSBudWxs
cHRyOwogfQogCi12b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQq
KSwgdm9pZCogYXJndW1lbnQpCit2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lk
ICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7CiAgICAgZW5zdXJlR2lnYWNh
Z2UoKTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CisgICAgaWYgKCFnX3ByaW1pdGl2
ZUdpZ2FjYWdlQmFzZVB0cikgewogICAgICAgICAvLyBJdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBv
ciB3ZSB3ZXJlIG5ldmVyIGFibGUgdG8gZW5hYmxlIGl0LgogICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQ2FsbGJhY2tzJiBjYWxs
YmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7Cisg
ICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8UHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6bXV0
ZXgoKSk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNoKENhbGxiYWNrKGZ1bmN0aW9uLCBh
cmd1bWVudCkpOwogfQogCi12b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rp
b24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCit2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVD
YWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7Ci0gICAg
Q2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tz
Pjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0g
KlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFj
a3MuY2FsbGJhY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuY2FsbGJh
Y2tzW2ldLmZ1bmN0aW9uID09IGZ1bmN0aW9uCiAgICAgICAgICAgICAmJiBjYWxsYmFja3MuY2Fs
bGJhY2tzW2ldLmFyZ3VtZW50ID09IGFyZ3VtZW50KSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9H
aWdhY2FnZS5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dp
Z2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJB
c3NlcnQuaCIKICNpbmNsdWRlICJCRXhwb3J0LmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2lu
Y2x1ZGUgIkJQbGF0Zm9ybS5oIgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKQEAgLTQ0LDIzICs0
NSw2MCBAQAogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDAKICNlbmRpZgogCi1leHRlcm4gIkMi
IEJFWFBPUlQgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9p
ZCogZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9pZCog
Z19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCitlbnVt
IEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVlCit9OworCiBCRVhQT1JUIHZvaWQg
ZW5zdXJlR2lnYWNhZ2UoKTsKIAotQkVYUE9SVCB2b2lkIGRpc2FibGVHaWdhY2FnZSgpOworQkVY
UE9SVCB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpOworCisvLyBUaGlzIHdpbGwgY2Fs
bCB0aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1lZGlhdGVseSBpZiB0aGUgUHJpbWl0aXZlIEdpZ2Fj
YWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KK0JFWFBPUlQgdm9pZCBhZGRQcmltaXRpdmVEaXNh
YmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7CitCRVhQT1JUIHZvaWQgcmVtb3Zl
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOworCitCSU5M
SU5FIGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgewor
ICAgIGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CisgICAgY2Fz
ZSBKU1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFsdWUiOworICAgIH0KKyAgICBCQ1JBU0go
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQklOTElORSB2b2lkKiYgYmFzZVB0cihLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAg
ICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKKyAgICBjYXNlIEpTVmFsdWU6
CisgICAgICAgIHJldHVybiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CisgICAgfQorICAgIEJD
UkFTSCgpOworICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK30KIAotLy8g
VGhpcyB3aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhlIEdp
Z2FjYWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KLUJFWFBPUlQgdm9pZCBhZGREaXNhYmxlQ2Fs
bGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Ci1CRVhQT1JUIHZvaWQgcmVtb3ZlRGlzYWJs
ZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK3ZvaWQgZm9yRWFjaEtpbmQoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmdW5jKFByaW1p
dGl2ZSk7CisgICAgZnVuYyhKU1ZhbHVlKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQq
IGNhZ2VkKFQqIHB0cikKK0JJTkxJTkUgVCogY2FnZWQoS2luZCBraW5kLCBUKiBwdHIpCiB7CiAg
ICAgQkFTU0VSVChwdHIpOwotICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGdfZ2lnYWNhZ2VC
YXNlUHRyOworICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHIoa2luZCk7CiAgICAg
aWYgKCFnaWdhY2FnZUJhc2VQdHIpCiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KApAQCAtNjgsOSArMTA2LDkgQEAgVCogY2FnZWQoVCogcHRyKQog
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJiBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KEdJR0FDQUdFX01BU0spKSk7CiB9CiAKLWlubGluZSBib29sIGlzQ2FnZWQo
Y29uc3Qgdm9pZCogcHRyKQorQklOTElORSBib29sIGlzQ2FnZWQoS2luZCBraW5kLCBjb25zdCB2
b2lkKiBwdHIpCiB7Ci0gICAgcmV0dXJuIGNhZ2VkKHB0cikgPT0gcHRyOworICAgIHJldHVybiBj
YWdlZChraW5kLCBwdHIpID09IHB0cjsKIH0KIAogQkVYUE9SVCBib29sIHNob3VsZEJlRW5hYmxl
ZCgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAyMjAzMjMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw4IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIKICAgICAgICAg
R2lnYWNhZ2U6OmVuc3VyZUdpZ2FjYWdlKCk7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAg
ICBpZiAodXNpbmdHaWdhY2FnZSgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQoZ19n
aWdhY2FnZUJhc2VQdHIpOwotICAgICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uo
Z19naWdhY2FnZUJhc2VQdHIsIEdJR0FDQUdFX1NJWkUsIDApKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQkFTU0VSVChnaWdhY2FnZUJhc2VQdHIoKSk7CisgICAgICAgICAgICBtX2xhcmdlRnJlZS5h
ZGQoTGFyZ2VSYW5nZShnaWdhY2FnZUJhc2VQdHIoKSwgR0lHQUNBR0VfU0laRSwgMCkpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICB9CkBAIC03MCw3ICs3MCwxMiBAQCBIZWFwOjpIZWFwKEhlYXBL
aW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgpCiB7
Ci0gICAgcmV0dXJuIG1fa2luZCA9PSBIZWFwS2luZDo6R2lnYWNhZ2UgJiYgZ19naWdhY2FnZUJh
c2VQdHI7CisgICAgcmV0dXJuIGlzR2lnYWNhZ2UobV9raW5kKSAmJiBnaWdhY2FnZUJhc2VQdHIo
KTsKK30KKwordm9pZCogSGVhcDo6Z2lnYWNhZ2VCYXNlUHRyKCkKK3sKKyAgICByZXR1cm4gR2ln
YWNhZ2U6OmJhc2VQdHIoZ2lnYWNhZ2VLaW5kKG1fa2luZCkpOwogfQogCiB2b2lkIEhlYXA6Omlu
aXRpYWxpemVMaW5lTWV0YWRhdGEoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9u
IDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgfkhlYXAoKSA9IGRlbGV0ZTsKICAgICAK
ICAgICBib29sIHVzaW5nR2lnYWNhZ2UoKTsKKyAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsg
Ly8gTWF5IGNyYXNoIGlmICF1c2luZ0dpZ2FjYWdlKCkuCiAgICAgCiAgICAgdm9pZCBpbml0aWFs
aXplTGluZU1ldGFkYXRhKCk7CiAgICAgdm9pZCBpbml0aWFsaXplUGFnZU1ldGFkYXRhKCk7Cklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCShyZXZpc2lvbiAyMjAzMjMpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsy
NSw1OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRl
ICJCSW5saW5lLmgiCisjaW5jbHVkZSAiR2lnYWNhZ2UuaCIKKwogbmFtZXNwYWNlIGJtYWxsb2Mg
ewogCiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsKICAgICBQcmltYXJ5LAotICAgIEdpZ2FjYWdlCisg
ICAgUHJpbWl0aXZlR2lnYWNhZ2UsCisgICAgSlNWYWx1ZUdpZ2FjYWdlCiB9OwogCi1zdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG51bUhlYXBzID0gMjsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbnVtSGVhcHMgPSAzOworCitCSU5MSU5FIGJvb2wgaXNHaWdhY2FnZShIZWFwS2luZCBoZWFw
S2luZCkKK3sKKyAgICBzd2l0Y2ggKGhlYXBLaW5kKSB7CisgICAgY2FzZSBIZWFwS2luZDo6UHJp
bWFyeToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2
ZUdpZ2FjYWdlOgorICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworQklOTElORSBHaWdhY2FnZTo6S2luZCBnaWdhY2FnZUtpbmQoSGVhcEtpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAg
ICBCQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CisgICAgY2Fz
ZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6
UHJpbWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAg
cmV0dXJuIEdpZ2FjYWdlOjpKU1ZhbHVlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1
cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsKK30KKworQklOTElORSBIZWFwS2luZCBoZWFwS2luZChH
aWdhY2FnZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2ln
YWNhZ2U6OlByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdh
Y2FnZTsKKyAgICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgorICAgICAgICByZXR1cm4gSGVhcEtp
bmQ6OkpTVmFsdWVHaWdhY2FnZTsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEhl
YXBLaW5kOjpQcmltYXJ5OworfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9JbmxpbmUuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9JbmxpbmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbmxpbmVfaAot
I2RlZmluZSBJbmxpbmVfaAotCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkgaW5saW5lCi0KLSNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5s
aW5lKSkKLQotI2VuZGlmIC8vIElubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHJldmlz
aW9uIDIyMDMyMykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTWFwX2gKICNkZWZpbmUgTWFwX2gKIAotI2lu
Y2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5o
IgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Bl
clByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nl
c3MuaAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9j
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGVyUHJvY2Vz
c19oCiAjZGVmaW5lIFBlclByb2Nlc3NfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVk
ZSAiQklubGluZS5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiU3RhdGljTXV0ZXgu
aCIKICNpbmNsdWRlIDxtdXRleD4KQEAgLTcxLDEzICs3MSwxMyBAQCBwcml2YXRlOgogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRGYXN0Q2Fz
ZSgpCitCSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1
cm4gc19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQorQklOTElORSBU
KiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQogewogICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7
CiAgICAgaWYgKCFvYmplY3QpCkBAIC04Niw3ICs4Niw3IEBAIElOTElORSBUKiBQZXJQcm9jZXNz
PFQ+OjpnZXQoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIFQqIFBlclBy
b2Nlc3M8VD46OmdldFNsb3dDYXNlKCkKK0JOT19JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0
U2xvd0Nhc2UoKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhzX211
dGV4KTsKICAgICBpZiAoIXNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSkp
IHsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkocmV2aXNpb24gMjIwMzIzKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsOCBAQAogI2lmbmRlZiBQZXJUaHJlYWRfaAogI2RlZmluZSBQZXJUaHJlYWRfaAog
CisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUg
IklubGluZS5oIgogI2luY2x1ZGUgIlBlckhlYXBLaW5kLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0
ZS5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtMTE1LDcgKzExNSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0ZDo6b25jZV9mbGFnIFBlclQKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotSU5MSU5FIFQqIFBlclRocmVhZDxUPjo6Z2V0RmFzdENhc2UoKQorQklOTElORSBUKiBQZXJU
aHJlYWQ8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KFBl
clRocmVhZFN0b3JhZ2U8VD46OmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3Iu
aAkocmV2aXNpb24gMjIwMzIzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBWZWN0b3JfaAogI2RlZmlu
ZSBWZWN0b3JfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgog
I2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGNz
dHJpbmc+CkBAIC0xMTksNyArMTE5LDcgQEAgaW5saW5lIFQmIFZlY3RvcjxUPjo6b3BlcmF0b3Jb
XShzaXplX3QgaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIHZvaWQgVmVjdG9y
PFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQorQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChj
b25zdCBUJiB2YWx1ZSkKIHsKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCiAgICAgICAg
IGdyb3dDYXBhY2l0eSgpOwpAQCAtMjEyLDE0ICsyMTIsMTQgQEAgdm9pZCBWZWN0b3I8VD46OnJl
YWxsb2NhdGVCdWZmZXIoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5M
SU5FIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSgpCitCTk9fSU5MSU5FIHZvaWQgVmVj
dG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4
KGluaXRpYWxDYXBhY2l0eSgpLCBtX2NhcGFjaXR5IC8gc2hyaW5rRmFjdG9yKTsKICAgICByZWFs
bG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5P
X0lOTElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5KCkKK0JOT19JTkxJTkUgdm9pZCBW
ZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4
KGluaXRpYWxDYXBhY2l0eSgpLCBtX3NpemUgKiBncm93RmFjdG9yKTsKICAgICByZWFsbG9jYXRl
QnVmZmVyKG5ld0NhcGFjaXR5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317432</attachid>
            <date>2017-08-07 10:24:58 -0700</date>
            <delta_ts>2017-08-07 14:24:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139688</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBA
QAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2
ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGFwdHMgSlNDIHRvIHRoZXJlIGJlaW5nIHR3byBn
aWdhY2FnZXMuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIG1hdHRlcnMgc2ltcGxlciwgdGhp
cyB0dXJucyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9ycyBpbnRvIHBlci1WTSBpbnN0YW5jZXMgcmF0
aGVyIHRoYW4KKyAgICAgICAgc2luZ2xldG9ucy4gSSBkb24ndCB0aGluayB3ZSB3ZXJlIGdhaW5p
bmcgYW55dGhpbmcgYnkgbWFraW5nIHRoZW0gYmUgc2luZ2xldG9ucy4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgbWFrZXMgaXQgZWFzeSB0byB0ZWFjaCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUga2luZHMgb2YKKyAgICAgICAgZ2lnYWNhZ2Vz
LiBXZSdsbCBoYXZlIG9uZSBvZiB0aG9zZSBhbGxvY2F0b3JzIHBlciBjYWdlLgorICAgICAgICAK
KyAgICAgICAgRnJvbSB0aGVyZSwgdGhpcyBjaGFuZ2UgdGVhY2hlcyBldmVyeW9uZSB3aG8gcHJl
dmlvdXNseSBrbmV3IGFib3V0IGNhZ2VzIHRoYXQgdGhlcmUgYXJlIHR3byBjYWdlcy4KKyAgICAg
ICAgVGhpcyBtZWFucyBoYXZpbmcgdG8gc3BlY2lmeSBlaXRoZXIgR2lnYWNhZ2U6OlByaW1pdGl2
ZSBvciBHaWdhY2FnZTo6SlNWYWx1ZS4gSW4gbW9zdCBwbGFjZXMsIHRoaXMgaXMKKyAgICAgICAg
ZWFzeTogdHlwZWQgYXJyYXlzIGFyZSBQcmltaXRpdmUgYW5kIGJ1dHRlcmZsaWVzIGFyZSBKU1Zh
bHVlLiBCdXQgdGhlcmUgYXJlIGEgZmV3IHBsYWNlcyB3aGVyZSBpdCdzCisgICAgICAgIG5vdCBz
byBvYnZpb3VzLCBzbyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIHNvbWUgaGVscGVycyB0byBtYWtl
IGl0IGVhc3kgdG8gZGVmaW5lIHdoYXQgY2FnZSB5b3Ugd2FudAorICAgICAgICB0byB1c2UgaW4g
b25lIHBsYWNlIGFuZCByZWZlciB0byBpdCBhYnN0cmFjdGx5LiBXZSBkbyB0aGlzIGluIERpcmVj
dEFyZ3VtZW50cyBhbmQgR2VuZXJpY0FyZ3VtZW50cy5oCisgICAgICAgIAorICAgICAgICBBIGxv
dCBvZiB0aGUgbWFnaWMgb2YgdGhpcyBjaGFuZ2UgaXMgZHVlIHRvIENhZ2VkQmFycmllclB0ciwg
d2hpY2ggY29tYmluZXMgQXV4aWxpYXJ5QmFycmllciBhbmQKKyAgICAgICAgQ2FnZWRQdHIuIFRo
aXMgcmVtb3ZlcyBvbmUgbGF5ZXIgb2YgImdldCgpIiBjYWxscyBmcm9tIGEgYnVuY2ggb2YgcGxh
Y2VzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQnV0dGVyZmx5KToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld1R5cGVkQXJyYXkpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RGlyZWN0UG5hbWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhTaXplSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNhZ2VkKToKKyAgICAgICAgKiBoZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6Omluc3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0Zhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAgICogaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KToKKyAg
ICAgICAgKEpTQzo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1l
bW9yeSk6CisgICAgICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
aW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKHByaW1pdGl2ZUdpZ2Fj
YWdlRGlzYWJsZWQpOgorICAgICAgICAoanNjbWFpbik6CisgICAgICAgIChnaWdhY2FnZURpc2Fi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21C
eXRlcyk6CisgICAgICAgICogcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmg6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgICogcnVu
dGltZS9DYWdlZEJhcnJpZXJQdHIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhZ2VkQmFycmll
clB0cjo6Q2FnZWRCYXJyaWVyUHRyKToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpj
bGVhcik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6c2V0KToKKyAgICAgICAgKEpT
Qzo6Q2FnZWRCYXJyaWVyUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJp
ZXJQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0
cjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3Bl
cmF0b3IhPSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6c2V0V2l0aG91dEJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yKiBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgICog
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVu
dHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjp1bm1h
cEFyZ3VtZW50KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmlzTWFwcGVkQXJndW1lbnQgY29uc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OnNldE1vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5jcHA6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWZmZXI6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpidWZmZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6cmVoYXNoKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3Rl
ZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9w
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmZhc3RTbGljZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAo
SlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJh
eS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0xv
Y2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFw
c2hvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y29udmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMlRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3Vi
bGVUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRv
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5
VG9VbmRlY2lkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWRE
ZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhTbG93T3JCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0
aFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEFy
cmF5TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRyeUdldEluZGV4
UXVpY2tseSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojppbml0aWFsaXplSW5kZXhXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFyc2VJbmRleGlu
Z01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpv
dXRPZkxpbmVTdG9yYWdlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om91dE9mTGlu
ZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW50MzIpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2VPck51bGwpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToK
KyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgIChKU0M6OlZNOjpwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNh
Z2VEaXNhYmxlZCk6CisgICAgICAgIChKU0M6OlZNOjpnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VEaXNhYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSk6CisgICAgICAgIChKU0M6OlZNOjpmaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNhZ2VFbmFi
bGVkKToKKyAgICAgICAgKEpTQzo6Vk06OmZpcmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjpnaWdhY2FnZUVuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9y
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojp+TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKwogMjAxNy0wOC0wNyAgUnlhbiBIYWRkYWQg
IDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjIwMjk5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAyLDkg
KzM4MDIsOSBAQCBpbnQgcnVuSlNDKENvbW1hbmRMaW5lIG9wdGlvbnMsIGJvb2wgaXNXCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgZ2lnYWNhZ2VEaXNhYmxlZCh2b2lkKikK
K3N0YXRpYyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCiB7Ci0gICAgZGF0
YUxvZygiR2lnYWNhZ2UgZGlzYWJsZWQhIEFib3J0aW5nLlxuIik7CisgICAgZGF0YUxvZygiUHJp
bWl0aXZlIGdpZ2FjYWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOwogICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOwogfQogCkBAIC0zODI3LDcgKzM4MjcsNyBAQCBpbnQganNjbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KCk7
CiAjZW5kaWYKICAgICBpZiAoR2lnYWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgpKQotICAgICAgICBH
aWdhY2FnZTo6YWRkRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWQsIG51bGxwdHIpOwor
ICAgICAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdp
Z2FjYWdlRGlzYWJsZWQsIG51bGxwdHIpOwogCiAgICAgaW50IHJlc3VsdDsKICAgICByZXN1bHQg
PSBydW5KU0MoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIw
MzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5OCw2ICs4OTgsNyBAQAogCQkwRkVD
M0M1NzFGMzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzU1
MUYzM0E0NTMwMEY1OUI2QyAvKiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUMzQzVB
MUYzM0E0ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNTgxRjMz
QTQ4OTAwRjU5QjZDIC8qIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi87IH07
CiAJCTBGRUMzQzVCMUYzM0E0ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUMzQzU5MUYzM0E0ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aCAqLzsgfTsKKwkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNUYx
RjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5jcHAgKi87IH07CiAJCTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50
UmVnVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLzsgfTsK
IAkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNjFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKQEAgLTM0OTYsNiArMzQ5Nyw3IEBACiAJ
CTBGRUMzQzU1MUYzM0E0NTMwMEY1OUI2QyAvKiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0M1ODFGMzNBNDg5MDBGNTlCNkMg
LyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUMzQzU5MUYzM0E0ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUMzQzVGMUYzNzlGNTMwMEY1
OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FnZWRCYXJyaWVyUHRy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2MjIsNiArNjYyNCw3IEBACiAJCQkJOUU3Mjk0MDkx
OTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi8sCiAJCQkJMEZCN0YzOEIxNUVEOEUz
ODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovLAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdC
MiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCisJCQkJMEZFQzNDNUYxRjM3OUY1MzAwRjU5QjZD
IC8qIENhZ2VkQmFycmllclB0ci5oICovLAogCQkJCUJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAv
KiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlERjYzQjAwODhGNkI5IC8qIENhbGxE
YXRhLmggKi8sCiAJCQkJRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8qIENhdGNoU2NvcGUuY3Bw
ICovLApAQCAtODYzOSw2ICs4NjQyLDcgQEAKIAkJCQkwRkIxNEUyMzE4MTMwOTU1MDA5QjZCNEQg
LyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcw
NEQ5MDYxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDM0M2MDFGMzc5RjUzMDBGNTlCNkMgLyogQ2FnZWRC
YXJyaWVyUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMwMEI3QzE4QUIxQjE0MDBBNkQ3MkUg
LyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
ODk4RjMyMUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGM0UxODIwMjExOTAwMkM5QjI2IC8qIERGR0lu
dmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24g
MjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAg
ICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXpl
KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKIAogICAgICAg
ICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ss
IHRoaXMgY2FzZSB3b3VsZCBzdWNrIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2Jq
ZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAgICAgCiAg
ICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
bV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpKSB7CisgICAgICAg
IGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgewogICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUiwg
c2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKQEAgLTc4NjgsNyArNzg2OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBz
aXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsK
IAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+YXV4aWxpYXJ5
U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
KHNpemUpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2
aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTc5MTMsNyArNzkxMyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3
U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1Np
emUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6
ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
aml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8
IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkp
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CkBAIC04NDk0LDcgKzg0OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3
VHlwZWRBcnJhCiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hH
UFIpOwogICAgIH0KICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKAotICAgICAg
ICBzdG9yYWdlR1BSLCBtX2ppdC52bSgpLT5hdXhpbGlhcnlTcGFjZSwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEdQUiwKKyAgICAgICAgc3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+cHJpbWl0aXZlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwKICAgICAgICAgc2NyYXRj
aEdQUjIsIHNsb3dDYXNlcyk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2l6ZUdQUik7CkBAIC0x
MDExMiw3ICsxMDExMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUJ1dHRl
cmYKICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxKTsKICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAg
ICAgc3RvcmFnZVJlc3VsdEdQUiwgbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2gy
LCBzY3JhdGNoMSwgc2NyYXRjaDMsIHNsb3dDYXNlcyk7CisgICAgICAgIHN0b3JhZ2VSZXN1bHRH
UFIsIG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoMiwg
c2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOwogICAgIG1faml0LmFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0b3JhZ2VSZXN1bHRHUFIpOwogCiAgICAg
bV9qaXQuc3RvcmUzMihzaXplR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVz
dWx0R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIy
MDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIzNSw3ICszMjM1LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgaWYgKG1fbm9kZS0+
b3AoKSAhPSBHZXRCdXR0ZXJmbHlXaXRob3V0Q2FnaW5nKQotICAgICAgICAgICAgYnV0dGVyZmx5
ID0gY2FnZWQoYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IGNhZ2VkKEdpZ2Fj
YWdlOjpKU1ZhbHVlLCBidXR0ZXJmbHkpOwogICAgICAgICBzZXRTdG9yYWdlKGJ1dHRlcmZseSk7
CiAgICAgfQogCkBAIC0zMjcyLDcgKzMyNzIsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzVHlwZWRWaWV3KG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOwotICAgICAgICBzZXRTdG9yYWdlKGNhZ2VkKG1f
b3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpKSk7Cisg
ICAgICAgIHNldFN0b3JhZ2UoY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9vdXQubG9hZFB0
cihjZWxsLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlQ2hlY2tBcnJheSgpCkBAIC01MDQwLDcgKzUwNDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cih+c3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDcpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlhcnlTcGFjZSwgYnl0
ZVNpemUsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0
b3JGb3JTaXplKHZtKCkucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgYnl0ZVNpemUs
IHNsb3dDYXNlKTsKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2Vs
bChhbGxvY2F0b3IsIHNsb3dDYXNlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3BsYXRX
b3JkcygKQEAgLTg4NjksNyArODg2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5u
ZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOwogICAgICAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkxpbmVSZXN1bHQgPSBtX291dC5hbmNo
b3IoCi0gICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJv
cGVydGllcy5hdEFueU51bWJlcigpLCBjYWdlZChzdG9yYWdlKSwgcmVhbEluZGV4LCBTY2FsZUVp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpKSk7CisgICAgICAgICAgICBtX291dC5sb2FkNjQo
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBjYWdlZChH
aWdhY2FnZTo6SlNWYWx1ZSwgc3RvcmFnZSksIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CkBAIC05MDQ5
LDcgKzkwNDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmludFB0clplcm8pOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwoCi0gICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckZvclNpemUodm0oKS5hdXhpbGlh
cnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgc2xvd1BhdGgpLAorICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0b3JGb3JTaXplKHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIGJ1dHRl
cmZseVNpemUsIHNsb3dQYXRoKSwKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwogCiAg
ICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1fb3V0LmFkZCgKQEAg
LTEwMDA1LDcgKzEwMDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogCiAgICAgICAgIHNp
emVfdCBzaXplSW5CeXRlcyA9IHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRvckZvcihzaXplSW5CeXRlcyk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUlu
Qnl0ZXMpOwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxs
KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0
LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBzdGFydE9mU3RvcmFnZSkpOwpAQCAtMTEyMzMsNyArMTEyMzMsNyBAQCBwcml2YXRlOgog
ICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0LmFkZCgKICAgICAgICAgICAgIHBh
eWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
dm0oKS5hdXhpbGlhcnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOworICAgICAgICBM
VmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLCBidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBz
dGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwoYWxsb2NhdG9yLCBmYWlsQ2FzZSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LmFkZChzdGFydE9m
U3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwpAQCAt
MTE2MTQsMzQgKzExNjE0LDM1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgTFZhbHVlIGNhZ2VkKExWYWx1ZSBwdHIpCisgICAgTFZhbHVlIGNhZ2VkKEdpZ2FjYWdlOjpL
aW5kIGtpbmQsIExWYWx1ZSBwdHIpCiAgICAgewotICAgICAgICBpZiAodm0oKS5naWdhY2FnZUVu
YWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseSh2bSgpLmdpZ2FjYWdlRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBtX291dC5jb25zdEludFB0cihnX2dpZ2FjYWdlQmFz
ZVB0cik7Ci0gICAgICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LmNvbnN0SW50UHRyKEdJR0FD
QUdFX01BU0spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IEIzIG1lc3NpbmcgdXAgdGhlIGJpdEFuZC4gQWxzbywgd2Ugd2FudCB0byBn
ZXQgQjMncyBleGNlbGxlbnQKLSAgICAgICAgICAgIC8vIGNvZGVnZW4gZm9yIDItb3BlcmFuZCBh
bmRxIG9uIHg4Ni02NC4KLSAgICAgICAgICAgIExWYWx1ZSBtYXNrZWQgPSBtX291dC5iaXRBbmQo
cHRyLCBtYXNrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQnV0IEIzIHdpbGwgY3Vy
cmVudGx5IG1lc3MgdXAgdGhlIGNvZGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGFkZC4gQmFzaWNhbGx5
LCBhbnkgb2Zmc2V0IGZyb20gd2hhdCB3ZQotICAgICAgICAgICAgLy8gY29tcHV0ZSBoZXJlIHdp
bGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVkIHdpdGggZ19naWdhY2FnZUJhc2VQdHIuIFRo
ZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAotICAgICAgICAgICAgLy8gbW92ZUNvbnN0YW50cygpIG9i
c2VydmVzIHRoYXQgaXQgbmVlZHMgdG8gcmVhc3NvY2lhdGUgaW4gb3JkZXIgdG8gaG9pc3QgdGhl
IGJpZyBjb25zdGFudHMuIEJ1dAotICAgICAgICAgICAgLy8gaXQncyBtdWNoIGVhc2llciB0byBq
dXN0IGJsb2NrIEIzJ3MgYmFkbmVzcyBoZXJlLiBUaGF0J3Mgd2hhdCB3ZSBkbyBmb3Igbm93Lgot
ICAgICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2lu
dChwb2ludGVyVHlwZSgpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihiYXNlUHRyKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cihtYXNrZWQpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKKyAgICAgICAgaWYgKGtpbmQgPT0g
R2lnYWNhZ2U6OlByaW1pdGl2ZSkgeworICAgICAgICAgICAgaWYgKHZtKCkucHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmFkZExhemlseSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gcHRyOworICAgICAgICBMVmFsdWUgYmFzZVB0ciA9
IG1fb3V0LmNvbnN0SW50UHRyKEdpZ2FjYWdlOjpiYXNlUHRyKGtpbmQpKTsKKyAgICAgICAgTFZh
bHVlIG1hc2sgPSBtX291dC5jb25zdEludFB0cihHSUdBQ0FHRV9NQVNLKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgQjMgbWVzc2luZyB1cCB0aGUg
Yml0QW5kLiBBbHNvLCB3ZSB3YW50IHRvIGdldCBCMydzIGV4Y2VsbGVudAorICAgICAgICAvLyBj
b2RlZ2VuIGZvciAyLW9wZXJhbmQgYW5kcSBvbiB4ODYtNjQuCisgICAgICAgIExWYWx1ZSBtYXNr
ZWQgPSBtX291dC5iaXRBbmQocHRyLCBtYXNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJ1dCBC
MyB3aWxsIGN1cnJlbnRseSBtZXNzIHVwIHRoZSBjb2RlIGdlbmVyYXRpb24gb2YgdGhpcyBhZGQu
IEJhc2ljYWxseSwgYW55IG9mZnNldCBmcm9tIHdoYXQgd2UKKyAgICAgICAgLy8gY29tcHV0ZSBo
ZXJlIHdpbGwgZ2V0IHJlYXNzb2NpYXRlZCBhbmQgZm9sZGVkIHdpdGggR2lnYWNhZ2U6OmJhc2VQ
dHIuIFRoZXJlJ3MgYSB3b3JsZCBpbiB3aGljaAorICAgICAgICAvLyBtb3ZlQ29uc3RhbnRzKCkg
b2JzZXJ2ZXMgdGhhdCBpdCBuZWVkcyB0byByZWFzc29jaWF0ZSBpbiBvcmRlciB0byBob2lzdCB0
aGUgYmlnIGNvbnN0YW50cy4gQnV0CisgICAgICAgIC8vIGl0J3MgbXVjaCBlYXNpZXIgdG8ganVz
dCBibG9jayBCMydzIGJhZG5lc3MgaGVyZS4gVGhhdCdzIHdoYXQgd2UgZG8gZm9yIG5vdy4KKyAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChwb2lu
dGVyVHlwZSgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2VQ
dHIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIobWFza2VkKTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgW10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
ICAgICAgICAgICAgIGppdC5hZGRQdHIocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCks
IHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRTd2l0Y2goU3dpdGNoRGF0YSogZGF0YSwgTFR5cGUg
dHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3ImIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpCi17
Ci0gICAgc3RhdGljIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiByZXN1bHQ7Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAot
ICAgICAgICBvbmNlRmxhZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3
IEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7Ci0gICAgICAgIH0pOwotICAgIHJl
dHVybiAqcmVzdWx0OwotfQotCiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6RmFz
dE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQogewogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNyArMzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEZhc3RNYWxsb2NBbGln
bmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewogcHVi
bGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciYgaW5zdGFuY2UoKTsKLQorICAgIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCk7CiAgICAgfkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAg
CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplKSBvdmVycmlkZTsKICAgICB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBv
dmVycmlkZTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI0ICsyNiwx
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oIgogCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL0dpZ2FjYWdl
Lmg+Ci0KIG5hbWVzcGFjZSBKU0MgewogCi1HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3Im
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKQotewotICAgIHN0YXRp
YyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIHJlc3VsdDsKLSAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VG
bGFnLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiAqcmVzdWx0Owot
fQotCi1HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpCitHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcihHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIDogbV9raW5kKGtp
bmQpCiB7CiB9CiAKQEAgLTUzLDE3ICszOSwxNyBAQCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6On5HaWdhY2FnCiAKIHZvaWQqIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQog
ewotICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUp
OworICAgIHJldHVybiBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhtX2tpbmQsIGFsaWdubWVu
dCwgc2l6ZSk7CiB9CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVl
QWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQogewotICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJl
ZShiYXNlUHRyKTsKKyAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUobV9raW5kLCBiYXNlUHRyKTsK
IH0KIAogdm9pZCBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIkdpZ2FjYWdlIik7CisgICAgb3V0LnBy
aW50KEdpZ2FjYWdlOjpuYW1lKG1fa2luZCksICJHaWdhY2FnZSIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjAzNDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYvR2lnYWNh
Z2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBzaW5nbGV0b24uIFRoZXJlIHNob3VsZCBiZSBk
aWZmZXJlbnQgaW5zdGFuY2VzIGZvciBwcmltYXJpZXMsIEpTVmFsdWVzLAotICAgIC8vIGFuZCBv
dGhlciB0aGluZ3MuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NDkxOQotICAgIHN0YXRpYyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3ImIGlu
c3RhbmNlKCk7Ci0KKyAgICBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoR2lnYWNhZ2U6
OktpbmQpOwogICAgIH5HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKICAgICAKICAg
ICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIG92ZXJyaWRlOwpAQCAtNDQsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgR2lnYWNhZ2VB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisgICAgR2lnYWNhZ2U6OktpbmQgbV9raW5kOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjIwMzQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTM3NiwxMCArMzc2LDEwIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIGxvYWRDYWdlZChzb3VyY2Us
IGRlc3QsIHNjcmF0Y2gpCittYWNybyBsb2FkQ2FnZWQoYmFzZVB0ciwgc291cmNlLCBkZXN0LCBz
Y3JhdGNoKQogICAgIGxvYWRwIHNvdXJjZSwgZGVzdAogICAgIGlmIEdJR0FDQUdFX0VOQUJMRUQg
YW5kIG5vdCBDX0xPT1AKLSAgICAgICAgbG9hZHAgX2dfZ2lnYWNhZ2VCYXNlUHRyLCBzY3JhdGNo
CisgICAgICAgIGxvYWRwIGJhc2VQdHIsIHNjcmF0Y2gKICAgICAgICAgYnRweiBzY3JhdGNoLCAu
ZG9uZQogICAgICAgICBhbmRwIGNvbnN0ZXhwciBHSUdBQ0FHRV9NQVNLLCBkZXN0CiAgICAgICAg
IGFkZHAgc2NyYXRjaCwgZGVzdApAQCAtMTIwOSw3ICsxMjA5LDcgQEAgX2xsaW50X29wX2lzX29i
amVjdDoKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNl
dEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0
QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKLSAgICBsb2FkQ2FnZWQoSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCB2
YWx1ZSkKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkK
ICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFz
SW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTIyMiw3ICsxMjIy
LDcgQEAgZW5kCiAKIG1hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5
T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlLCBzY3JhdGNoKQogICAgIGJpbHQg
cHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGluZQotICAg
IGxvYWRDYWdlZChKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVj
dEFuZFN0b3JhZ2UsIHNjcmF0Y2gpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdhY2FnZUJh
c2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZSwgc2NyYXRjaCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGky
cSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFk
eQpAQCAtMTI5OCw3ICsxMjk4LDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAg
YnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgYnRpeiB0MiwgSW5k
ZXhpbmdTaGFwZU1hc2ssIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigxLCB0MSkKLSAgICBsb2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwg
dDAsIHQyKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyLCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDIpCiAgICAgbG9hZGkgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgdDAKICAg
ICBiaWx0IHQwLCAwLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBvcnEgdGFnVHlwZU51bWJl
ciwgdDAKQEAgLTE0ODEsNyArMTQ4MSw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDEsIHQxCi0gICAgbG9hZENh
Z2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2df
anNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMsIHQ1
KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAgICAgYmllcSB0MiwgSW50MzJTaGFw
ZSwgLm9wR2V0QnlWYWxJc0NvbnRpZ3VvdXMKICAgICBiaW5lcSB0MiwgQ29udGlndW91c1NoYXBl
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKQEAgLTE1MjgsNyArMTUyOCw3IEBAIF9sbGludF9v
cF9nZXRfYnlfdmFsOgogICAgIGJpYSB0MiwgTGFzdEFycmF5VHlwZSAtIEZpcnN0QXJyYXlUeXBl
LCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAjIFN3ZWV0LCBub3cgd2Uga25vdyB0aGF0IHdl
IGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29tZSBiYXNpYyB0aGluZ3Mgbm93LgotICAgIGxvYWRD
YWdlZChKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDUpCisgICAgbG9hZENh
Z2VkKF9nX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0ciwgSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVj
dG9yW3QwXSwgdDMsIHQ1KQogICAgIGJpYWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5n
dGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAjIE5vdyBiaXNlY3QgdGhyb3VnaCB0
aGUgdmFyaW91cyB0eXBlcy4gTm90ZSB0aGF0IHdlIGNhbiB0cmVhdCBVaW50OEFycmF5VHlwZSBh
bmQKQEAgLTE2MTksNyArMTYxOSw3IEBAIG1hY3JvIHB1dEJ5VmFsKHNsb3dQYXRoKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDMsIHQzCi0gICAgbG9hZENh
Z2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwLCB0NSkKKyAgICBsb2FkQ2FnZWQoX2df
anNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAsIHQ1
KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAgICAgYmluZXEgdDIsIEludDMyU2hh
cGUsIC5vcFB1dEJ5VmFsTm90SW50MzIKICAgICBjb250aWd1b3VzUHV0QnlWYWwoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lv
biAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKHVuCiAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG51bUVsZW1lbnRzKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudEJ5dGVTaXplKTsK
ICAgICBpZiAoIXNpemUpCiAgICAgICAgIHNpemUgPSAxOyAvLyBNYWtlIHN1cmUgbWFsbG9jIGFj
dHVhbGx5IGFsbG9jYXRlcyBzb21ldGhpbmcsIGJ1dCBub3QgdG9vIG11Y2guIFdlIHVzZSBudWxs
IHRvIG1lYW4gdGhhdCB0aGUgYnVmZmVyIGlzIG5ldXRlcmVkLgotICAgIG1fZGF0YSA9IEdpZ2Fj
YWdlOjp0cnlNYWxsb2Moc2l6ZSk7CisgICAgbV9kYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhH
aWdhY2FnZTo6UHJpbWl0aXZlLCBzaXplKTsKICAgICBpZiAoIW1fZGF0YSkgewogICAgICAgICBy
ZXNldCgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgICAgICBtZW1zZXQobV9kYXRhLCAwLCBz
aXplKTsKIAogICAgIG1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6
ZTsKLSAgICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShwKTsg
fTsKKyAgICBtX2Rlc3RydWN0b3IgPSBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBwKTsgfTsKIH0KIAogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpt
YWtlU2hhcmVkKCkKQEAgLTE4Nyw3ICsxODcsNyBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoQXJyCiAvLyAgIGZyb20gdGhlIGNhZ2UuCiBSZWY8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21CeXRlcyhkYXRhLCBieXRlTGVuZ3RoLCBb
XSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShwKTsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZy
b21CeXRlcyhkYXRhLCBieXRlTGVuZ3RoLCBbXSAodm9pZCogcCkgeyBHaWdhY2FnZTo6ZnJlZShH
aWdhY2FnZTo6UHJpbWl0aXZlLCBwKTsgfSk7CiB9CiAKIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNl
IHRoaXMgZXhjZXB0IGlmIHRoZSBtZW1vcnkgY29tZXMgZnJvbSB0aGUgY2FnZS4KQEAgLTE5OCw4
ICsxOTgsOCBAQCBSZWY8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wCiAvLyAt
IFdlYkFzc2VtYmx5LiBXYXNtIHNob3VsZCBhbGxvY2F0ZSBmcm9tIHRoZSBjYWdlLgogUmVmPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1bmN0aW9uJiYgZGVz
dHJ1Y3RvcikKIHsKLSAgICBpZiAoZGF0YSAmJiBieXRlTGVuZ3RoICYmICFHaWdhY2FnZTo6aXND
YWdlZChkYXRhKSkKLSAgICAgICAgR2lnYWNhZ2U6OmRpc2FibGVHaWdhY2FnZSgpOworICAgIGlm
IChkYXRhICYmIGJ5dGVMZW5ndGggJiYgIUdpZ2FjYWdlOjppc0NhZ2VkKEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIGRhdGEpKQorICAgICAgICBHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KCk7CiAgICAgCiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZv
aWQqPihkYXRhKSwgYnl0ZUxlbmd0aCwgV1RGTW92ZShkZXN0cnVjdG9yKSk7CiAgICAgcmV0dXJu
IGNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdXhpbGlhcnlCYXJyaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDggQEAgY2xhc3MgVk07CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
Y2xhc3MgQXV4aWxpYXJ5QmFycmllciB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBUIFR5cGU7Cisg
ICAgCiAgICAgQXV4aWxpYXJ5QmFycmllcigpOiBtX3ZhbHVlKCkgeyB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBK
U0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7
CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
dm9pZCogYmFzZSA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOworICAgIHZvaWQq
IGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZShzaXplKTsK
ICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAsNyBAQCBp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0
IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShz
aXplKTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
dHJ5QWxsb2NhdGUoc2l6ZSk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVy
dHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0
cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9
IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5ld0Jh
c2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXpl
KTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJ
WE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ2FnZWRQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCisvLyBU
aGlzIGlzIGEgY29udmVuaWVudCBjb21ibyBvZiBBdXhpbGlhcnlCYXJyaWVyIGFuZCBDYWdlZFB0
ci4KKwordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KK2Ns
YXNzIENhZ2VkQmFycmllclB0ciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBHaWdh
Y2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAgICB0eXBlZGVmIFQgVHlwZTsKKyAgICAK
KyAgICBDYWdlZEJhcnJpZXJQdHIoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fYmFycmllci5jbGVhcigp
OyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB2b2lkIHNldChWTSYgdm0s
IEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2
bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIFQqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoKTsgfQorICAgIFQqIGdldE1h
eUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXRNYXlCZU51bGwoKTsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWdlZEJhcnJpZXJQdHImIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgpID09IG90aGVyLmdl
dE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2Fn
ZWRCYXJyaWVyUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRCYXJyaWVyUHRyKCk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXRXaXRob3V0
QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJyaWVyKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOyB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9y
W10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxraW5kLCBUPj4gbV9iYXJy
aWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIyMDM0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3Zl
cnJpZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxs
ZWUsIG1fY2FsbGVlLmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1
ZXNGdW5jdGlvbigpLCBEb250RW51bSk7CiAgICAgCi0gICAgdm9pZCogYmFja2luZ1N0b3JlID0g
dm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKKyAg
ICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVk
QXJndW1lbnRzLmtpbmQpLnRyeUFsbG9jYXRlKG1hcHBlZEFyZ3VtZW50c1NpemUoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoYmFja2luZ1N0b3JlKTsKICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0
aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQo
dm0sIHRoaXMsIG92ZXJyaWRlcyk7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJn
dW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBvdmVycmlkZVRoaW5nc0lmTmVj
ZXNzYXJ5KHZtKTsKLSAgICBtX21hcHBlZEFyZ3VtZW50cy5nZXQoKVtpbmRleF0gPSB0cnVlOwor
ICAgIG1fbWFwcGVkQXJndW1lbnRzW2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAko
cmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw5ICsyNSwxMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDYWdlZEJh
cnJpZXJQdHIuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCIKICNpbmNsdWRl
ICJHZW5lcmljQXJndW1lbnRzLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2VkUHRyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC03Myw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
TWFwcGVkQXJndW1lbnQodWludDMyX3QgaSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBp
IDwgbV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3VtZW50cyB8fCAhbV9tYXBwZWRBcmd1bWVudHMu
Z2V0KClbaV0pOworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9tYXBwZWRBcmd1
bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzW2ldKTsKICAgICB9CiAKICAgICBib29sIGlzTWFw
cGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAtMTY0LDcgKzE2NSw3IEBAIHBy
aXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQz
Ml90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJn
dW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5
LgogICAgIHVpbnQzMl90IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVu
Z3RoIGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhl
IGFjdHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2Ug
aXQgdGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICBBdXhpbGlhcnlCYXJyaWVy
PGJvb2wqPiBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQg
bGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0
aWVzLgorICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21h
cHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxs
ZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
NiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhZ2VkQmFycmllclB0ci5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjAsNyArNjEs
NyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIAotICAgIEF1eGlsaWFyeUJhcnJpZXI8Ym9vbCo+IG1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yOworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0
aXZlLCBib29sPiBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+
Ojppbml0TW9kaWZpZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcik7CiAKICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5n
U3RvcmUgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Y8OD4oYXJnc0xlbmd0aCkpOworICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5n
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQp
LnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGJvb2wqIG1vZGlm
aWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAg
IG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1
bWVudHMpOwpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
c2V0TW9kaWZpZWQKIHsKICAgICBpbml0TW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9ySWZOZWNl
c3Nhcnkodm0sIGxlbmd0aCk7CiAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKQotICAgICAgICBtX21v
ZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5nZXQoKVtpbmRleF0gPSB0cnVlOworICAgICAgICBt
X21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcltpbmRleF0gPSB0cnVlOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgpAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6aXNNb2RpZmllZEEKICAgICBpZiAoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlw
dG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KClbaW5kZXhdOwor
ICAgICAgICByZXR1cm4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JbaW5kZXhdOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hhc2hNYXBJbXBsLmNwcAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2
Miw3IEBAIHZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2gKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2hlYWQpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fdGFpbCk7CiAgICAgCi0gICAgaWYgKEhhc2hNYXBCdWZmZXJUeXBlKiBidWZmZXIg
PSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSkKKyAgICBpZiAoSGFzaE1hcEJ1ZmZlclR5cGUq
IGJ1ZmZlciA9IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldE1heUJlTnVsbCgpKQogICAgICAgICB2
aXNpdG9yLm1hcmtBdXhpbGlhcnkoYnVmZmVyKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODgsNyArMTg4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBI
YXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7Ci0gICAgICAgIHZvaWQqIGRh
dGEgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAg
ICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxv
Y2F0ZShhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMzAyLDcgKzMwMiw3IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLmdldCgpLT5idWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5idWZm
ZXIoKTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtKQpAQCAtNTkxLDcgKzU5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtYWtlQW5k
U2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2J1ZmZlci5n
ZXQoKS0+cmVzZXQobV9jYXBhY2l0eSk7CisgICAgICAgICAgICBtX2J1ZmZlci0+cmVzZXQobV9j
YXBhY2l0eSk7CiAgICAgICAgICAgICBhc3NlcnRCdWZmZXJJc0VtcHR5KCk7CiAgICAgICAgIH0K
IApAQCAtNjU1LDcgKzY1NSw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1h
cEJ1Y2tldFR5cGU+IG1faGVhZDsKICAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+
IG1fdGFpbDsKLSAgICBBdXhpbGlhcnlCYXJyaWVyPEhhc2hNYXBCdWZmZXJUeXBlKj4gbV9idWZm
ZXI7CisgICAgQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpKU1ZhbHVlLCBIYXNoTWFwQnVmZmVy
VHlwZT4gbV9idWZmZXI7CiAgICAgdWludDMyX3QgbV9rZXlDb3VudDsKICAgICB1aW50MzJfdCBt
X2RlbGV0ZUNvdW50OwogICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjIwMzQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAog
ICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKIAogICAgICAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2
bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICs5OCw3IEBAIEpT
QXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICB9IGVsc2UgewogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsKICAgICAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4
Qmlhcywgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZt
LmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0
b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
dGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0g
QnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCBpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UpOwpA
QCAtMzYwLDcgKzM2MCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoY29u
c3QKICAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwot
ICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdT
aXplKTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7CiAgICAgICAgIGlmICghbmV3QWxsb2NCYXNlKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBk
ZXNpcmVkQ2FwYWNpdHk7CkBAIC01NTAsNyArNTUwLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIGlmICghbmV3TGVuZ3Ro
KQpAQCAtNjIwLDcgKzYyMCw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhl
YykKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXRNYXlCZU51bGwoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtNzIyLDcgKzcyMiw3IEBAIHZvaWQgSlNBcnJheTo6
cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICAKICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOiB7CkBAIC04OTAs
OSArODkwLDkgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiAg
ICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpyZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7
CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAg
bWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBtX2J1dHRl
cmZseS5nZXQoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVv
ZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHku
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRh
dGEoKSwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4
LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0
dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0
YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICByZXN1
bHRCdXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNvdW50KTsKIAogICAgICAgICByZXR1cm4gcmVz
dWx0QXJyYXk7CkBAIC05NzAsNyArOTcwLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZQogICAgICAgICAvLyBBZGp1c3QgdGhlIEJ1dHRlcmZseSBhbmQgdGhlIGlu
ZGV4IGJpYXMuIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSdyZSBjaGFu
Z2luZwogICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIEJ1dHRlcmZseSwgd2hpY2ggbmVlZHMg
dG8gcG9pbnQgYXQgdGhlIGZpcnN0IGluZGV4ZWQgcHJvcGVydHkgaW4gdGhlIHVzZWQKICAgICAg
ICAgLy8gcG9ydGlvbiBvZiB0aGUgdmVjdG9yLgotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpLT5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUoKSwg
Y291bnQpOwogICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7CiAgICAgICAgIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2lu
ZGV4QmlhcyArPSBjb3VudDsKQEAgLTEwMTUsNyArMTAxNSw3IEBAIGJvb2wgSlNBcnJheTo6c2hp
ZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFJF
TEVBU0VfQVNTRVJUKGNvdW50ID4gMCk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTExNzEsNyArMTE3MSw3IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsK
ICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNz
OgpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55
SW5kZXhpbgogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAKICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVj
ayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQg
d2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2ggc2hpZnRpbmcgYW5kIHRo
ZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3RvcmFnZSBtb2RlLgpAQCAt
MTIzOCw3ICsxMjM4LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bgogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNo
ZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhh
dCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQg
dGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCkBA
IC0xMjgxLDcgKzEyODEsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSog
ZXhlCiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5n
ZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dE1heUJlTnVsbCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBj
YXNlIEFycmF5Q2xhc3M6CkBAIC0xMzU0LDcgKzEzNTQsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6IFdoYXQgcHJldmVudHMgdGhpcyBm
cm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUgbGVuZ3RoIGZ1bmN0aW9u
IHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBBU1NFUlQobGVuZ3RoID09
IHRoaXMtPmxlbmd0aCgpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsy
MzEsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlKFZNJiB2CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBC
dXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlh
bExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxv
Y2F0ZShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZv
aWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShu
dWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgIGlmICghdGVt
cCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
cmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEpTQXJyYXlC
dWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgdm9pZCogdGVtcDsKICAg
ICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CiAgICAgICAg
IGlmIChzaXplKSB7Ci0gICAgICAgICAgICB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxs
b2NhdGUobnVsbHB0ciwgc2l6ZSk7CisgICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShudWxscHRyLCBzaXplKTsKICAgICAgICAg
ICAgIGlmICghdGVtcCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZQpA
QCAtOTAsNyArOTAsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNp
emVfdD4obGVuZ3RoKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudFNpemUpOwotICAgIG1f
dmVjdG9yID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhzaXplKTsKKyAgICBtX3ZlY3RvciA9IEdpZ2Fj
YWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CiAgICAgaWYgKCFtX3Zl
Y3RvcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtb2RlID09IFplcm9GaWxsKQpAQCAtMTky
LDcgKzE5Miw3IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCoKICAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6
ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7
CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCi0gICAg
ICAgIEdpZ2FjYWdlOjpmcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCgpKTsKKyAgICAgICAg
R2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgdGhpc09iamVjdC0+bV92ZWN0b3Iu
Z2V0KCkpOwogfQogCiBKU0FycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6dW5zaGFyZWRK
U0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIC8vIE5vdGU6IGV2ZXJ5dGhpbmcgYmVs
b3cgbXVzdCBjb21lIGFmdGVyIGFkZEN1cnJlbnRUaHJlYWQoKS4KICAgICBtX3ZtLT50cmFwcygp
Lm5vdGlmeUdyYWJBbGxMb2NrcygpOwogICAgIAotICAgIG1fdm0tPmZpcmVHaWdhY2FnZUVuYWJs
ZWRJZk5lY2Vzc2FyeSgpOworICAgIG1fdm0tPmZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWRJ
Zk5lY2Vzc2FyeSgpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIGlmIChT
YW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxl
cigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKU09iamVjdDo6
aGVhcFNuYXBzaG90KEpTQ2VsbCogY2VsbAogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRQcm9w
ZXJ0eU5hbWVFZGdlKHRoaXNPYmplY3QsIHRvVmFsdWUuYXNDZWxsKCksIGVudHJ5LmtleSk7CiAg
ICAgfQogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIGlmIChidXR0ZXJmbHkpIHsK
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBkYXRhID0gbnVsbHB0cjsKICAgICAgICAg
dWludDMyX3QgY291bnQgPSAwOwpAQCAtNjEzLDcgKzYxMyw3IEBAIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTg3NSw3ICs4NzUsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtODk3LDcgKzg5Nyw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewotICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQo
KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICBi
cmVhazsKQEAgLTk3OSw3ICs5NzksNyBAQCB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vCiAgICAgICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgc3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1
dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6
CkBAIC0xMDExLDcgKzEwMTEsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFs
SW5kZXhlCiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9w
dGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIGxlbmd0aCk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5
UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpLCB2bSwgdGhp
cywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5LCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0
ZXJmbHkuZ2V0TWF5QmVOdWxsKCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHByb3BlcnR5Q2FwYWNp
dHksIGZhbHNlLCAwLAogICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5l
d0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBAIC0xMDk5LDcgKzEw
OTksNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgSW5k
ZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9s
ZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CiAKLSAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFnZUJ1dHRlcmZseSh2bSwgdGhpcywgb2xk
U3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwgbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5
QmVOdWxsKCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9y
YWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBvbGRTdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3Ro
LCBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKSk7CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwg
b2xkU3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIG51
a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJm
bHkpOwpAQCAtMTExNyw0MyArMTExNyw0MyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNvbnZlcnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlC
ZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldE1heUJl
TnVsbCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgp
LT5jb250aWd1b3VzSW50MzIoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJ
bnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRl
ZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlw
ZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdl
dCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIAogICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpKTsKLSAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBB
U1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogCiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9j
YXRlQ29udGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCiBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29w
eWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICB1bnNpZ25lZCBwdWJs
aWNMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCk7CiAg
ICAgCkBAIC0xMTYyLDcgKzExNjIsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1
Y3RDb252ZXJ0CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKICAgICAgICAgcHJvcGVydHlTaXplICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgCiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTExODAsNyArMTE4MCw3IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rv
ckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwog
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaS0tOykKQEAgLTEyMDMs
NyArMTIwMyw3IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKIHsK
ICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogY3VycmVudCA9ICZidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldOwogICAgICAgICBk
b3VibGUqIGN1cnJlbnRBc0RvdWJsZSA9IGJpdHdpc2VfY2FzdDxkb3VibGUqPihjdXJyZW50KTsK
QEAgLTEyMTgsNyArMTIxOCw3IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0
SW50MzIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
OjpBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
OwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGln
dW91cyhWTSYgdm0pCkBAIC0xMjI2LDcgKzEyMjYsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRJbnQzCiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNv
bnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsK
KyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTEyMzQsOSArMTIzNCw5IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZWN0b3JMZW5ndGg7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
V2l0aG91dFdyaXRlQmFycmllcih2KTsKQEAgLTEyNjEsNyArMTI2MSw3IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKIHsKICAgICBBU1NFUlQoaGFzRG91YmxlKGlu
ZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykgewogICAgICAgICBkb3VibGUqIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaV07CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudEFzVmFsdWUg
PSBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oY3VycmVudCk7CkBAIC0xMjc2
LDcgKzEyNzYsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiAg
ICAgCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQoKS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJh
eVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTEy
ODQsOSArMTI4NCw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHku
Z2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBj
b25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2
ZWN0b3JMZW5ndGgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAg
ICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgewpAQCAtMTMxNSw5ICsxMzE1LDkgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpOwogCi0gICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJh
eVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CkBAIC0xNDA4LDggKzE0MDgsOCBAQCB2b2lk
IEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJGb3JWYWx1ZShWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OnNl
dEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xl
bmd0aCgpKTsKLSAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7
CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBj
b252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICBzZXRJbmRleFF1aWNrbHko
dm0sIGluZGV4LCB2YWx1ZSk7CiB9CkBAIC0xNTc3LDcgKzE1NzcsNyBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5
LmdldCgpLT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTE4NjIsNyArMTg2Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0MKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldOwpAQCAtMjE2OCw3ICsyMTY4LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iagogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7CkBAIC0yMzI1LDcgKzIzMjUsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEdldHRlclByCiBib29sIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNj
cmlwdG9yKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1
dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIGF1
dG8gbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsK
IAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAo
ZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMjM5NSw3ICsyMzk1LDcgQEAgYm9vbCBKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMo
KSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4
ZWRBY2Nlc3NvcnModm0pOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwLmdldCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7CiAgICAgCiAgICAgLy8gMS4g
TGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCkBAIC0yNDI3LDcg
KzI0MjcsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAgICAg
ICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CiAKICAgICAgICAgcHV0SW5kZXhlZERlc2Ny
aXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBpZiAoaW5k
ZXggPj0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNTU5LDcgKzI1NTksNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgQVNTRVJUKChpbmRleGluZ1R5cGUoKSAmIEluZGV4aW5n
U2hhcGVNYXNrKSA9PSBpbmRleGluZ1NoYXBlKTsKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxk
QmVTcGFyc2UoKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7
CiAgICAgCiAgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdy
ZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCiAgICAgLy8gb3Ig
ZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCkBAIC0yNTgxLDcgKzI1ODEsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CkBAIC0yODY5LDcgKzI4
NjksNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uCiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRy
aWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydEludDMy
VG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjg4Myw3ICsyODgzLDcgQEAgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogICAgICAgICAKICAgICBjYXNl
IEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsK
LSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQor
ICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0
b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjkwMiw3ICsyOTAyLDcgQEAgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yOTEyLDcgKzI5MTIsNyBAQCBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uCiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBp
ZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CkBAIC0zMDE1LDgg
KzMwMTUsOCBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAg
aWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBpZiAo
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JOdWxsKCkpCiAgICAgICAgICAg
ICBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKLSAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBt
X2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0KIAogICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5n
dGgoaW5kZXhCaWFzLCB2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CkBAIC0z
MTMyLDcgKzMxMzIsNyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYg
CiAKIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQo
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAog
ICAgIEFTU0VSVChsZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgQVNT
RVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlw
ZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGlu
Z1R5cGUoKSkpOwpAQCAtMzE4OCwxMSArMzE4OCwxMSBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9j
YXRlQW5kU2hyaW5rQnV0dGVyCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkg
fHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkg
fHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKG1fYnV0dGVyZmx5
LmdldCgpLT52ZWN0b3JMZW5ndGgoKSA+IGxlbmd0aCk7Ci0gICAgQVNTRVJUKCFtX2J1dHRlcmZs
eS5nZXQoKS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKCkpKTsKKyAg
ICBBU1NFUlQobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpID4gbGVuZ3RoKTsKKyAgICBBU1NF
UlQoIW1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUo
KSkpOwogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1
Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1
Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOwogICAgIG5ld0J1dHRl
cmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpAQCAtMzIwNiw3
ICszMjA2LDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAg
IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1
cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBo
YXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgogCi0gICAgcmV0dXJu
IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1fYnV0dGVyZmx5LmdldCgp
LmdldE1heUJlTnVsbCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6
ZSk7CisgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1f
YnV0dGVyZmx5LmdldE1heUJlTnVsbCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6
ZSwgbmV3U2l6ZSk7CiB9CiAKIHN0YXRpYyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKiBn
ZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVy
U2V0dGVyLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBlIHR5cGUpCkBAIC0zNTUy
LDcgKzM1NTIsNyBAQCB1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBv
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMjAz
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgi
CiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5o
IgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIkNh
Z2VkQmFycmllclB0ci5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgpAQCAtNDMsNyArNDMsNiBA
QAogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJTcGFy
c2VBcnJheVZhbHVlTWFwLmgiCi0jaW5jbHVkZSA8d3RmL0NhZ2VkUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE3OCwxNCArMTc3LDE0
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7CiAgICAgfQogICAgICAgICAKICAgICB1bnNpZ25lZCBnZXRWZWN0
b3JMZW5ndGgoKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcHV0SW5saW5l
Rm9ySlNPYmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTIyMSw3ICsyMjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1l
IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU1LDcgKzI1NCw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAg
IHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRN
YXlCZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXRNYXlCZU51bGwoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJ
REVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMjgxLDcgKzI4MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCkuYXNJbnQzMigpKTsKQEAgLTI5OSw3ICsyOTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAg
ewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1h
eUJlTnVsbCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dE1heUJlTnVsbCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zNTMsNyArMzUyLDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwo
KTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5H
X1RZUEVTOgpAQCAtMzc2LDcgKzM3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBz
ZXRJbmRleFF1aWNrbHkoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgewotICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwpAQCAtNDM2LDcgKzQzNSw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
aW5pdGlhbGl6ZUluZGV4KE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAg
ICBWTSYgdm0gPSBzY29wZS52bSgpOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewogICAgICAg
ICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIHNldElu
ZGV4UXVpY2tseVRvVW5kZWNpZGVkKHZtLCBpLCB2KTsKQEAgLTQ5Myw3ICs0OTIsNyBAQCBwdWJs
aWM6CiAgICAgLy8gYmFycmllcnMuIFRoaXMgaW1wbGllcyBub3QgaGF2aW5nIGFueSBkYXRhIGZv
cm1hdCBjb252ZXJzaW9ucy4KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZUluZGV4
V2l0aG91dEJhcnJpZXIoT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZSYsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7Ci0gICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0Miw3ICs1
NDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgICAgICAgICAgcmV0dXJuICEh
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC01NTksNyArNTU4LDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VN
b2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjksMTEg
KzY2OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7
CiAgICAgfQogICAgICAgICAKLSAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOyB9Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwo
KTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7IH0KKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOyB9CiAgICAgCi0gICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxp
bmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlv
bkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtODA3LDcg
KzgwNiw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzIoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkp
KQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzSW50MzIo
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpA
QCAtODE5LDcgKzgxOCw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVE
b3VibGUoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91c0RvdWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZURvdWJsZVNsb3co
dm0pOwogICAgIH0KQEAgLTgyOSw3ICs4MjgsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pT
VmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VM
WShoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVD
b250aWd1b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtODQxLDcgKzg0MCw3IEBAIHB1YmxpYzoKICAg
ICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAg
ICBpZiAoTElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJu
IGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KQEAgLTg5Myw3ICs4OTIsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBv
ciBub3QgdGhlCkBAIC05MDIsNyArOTAxLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKQEAgLTk2OCwxMyArOTY3LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJU
KGxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAgICAgQVNTRVJUKGhh
c0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8
fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkgPCBs
ZW5ndGgpIHsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0
aCkgewogICAgICAgICAgICAgaWYgKCFlbnN1cmVMZW5ndGhTbG93KHZtLCBsZW5ndGgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIGlmIChtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCi0gICAg
ICAgICAgICBtX2J1dHRlcmZseS5nZXQoKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAg
ICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0xMDQ2LDcgKzEwNDUsNyBAQCBwcml2YXRlOgogICAg
IFByb3BlcnR5T2Zmc2V0IHByZXBhcmVUb1B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmVJRCwgU3RydWN0dXJl
Kik7CiAKIHByb3RlY3RlZDoKLSAgICBBdXhpbGlhcnlCYXJyaWVyPENhZ2VkUHRyPEJ1dHRlcmZs
eT4+IG1fYnV0dGVyZmx5OworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwg
QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToK
ICAgICB1aW50MzJfdCBtX3BhZGRpbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjIwMzQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVh
dGVVbmluaXRpYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVy
ZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRpYWxpemVkID0gZ2xvYmFs
T2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB2b2lkKiB0
ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICB2b2lkKiB0ZW1w
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDE1ICsxNjUsMTkgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9ydW5Mb29wKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSkKICNlbmRpZiAvLyBVU0UoQ0YpCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBUeXBl
KQotICAgICwgYXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRvckF0dHJp
YnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSksICZHaWdh
Y2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBjZWxsU3BhY2Uo
IkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlv
biwgSGVhcENlbGw6OkpTQ2VsbCksICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
aW5zdGFuY2UoKSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpT
Q2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENl
bGw6OkpTQ2VsbCksICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2Uo
KSkKLSAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNw
YWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9i
amVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgJkZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgc2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwg
aGVhcCwgJkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQorICAg
ICwgZmFzdE1hbGxvY0FsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPigpKQorICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQ
cmltaXRpdmUpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlx
dWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6SlNWYWx1ZSkpCisg
ICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2Ug
QXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0
KCkpCisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2Fn
ZSBBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1
Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0
KCkpCisgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMo
RG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxv
Y2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBK
U0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBD
ZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc3RyaW5nU3Bh
Y2UoIkpTU3RyaW5nIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRl
c3RydWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RN
YWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RN
YWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNl
KCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29k
ZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsICZGYXN0TWFs
bG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIHdlYkFzc2VtYmx5
Q29kZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RN
YWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiAjZW5kaWYKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAg
LCBjbGllbnREYXRhKDApCkBAIC0yMTEsNyArMjE1LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9jb2RlQ2FjaGUoc3RkOjptYWtlX3VuaXF1ZTxD
b2RlQ2FjaGU+KCkpCiAgICAgLCBtX2J1aWx0aW5FeGVjdXRhYmxlcyhzdGQ6Om1ha2VfdW5pcXVl
PEJ1aWx0aW5FeGVjdXRhYmxlcz4oKnRoaXMpKQogICAgICwgbV90eXBlUHJvZmlsZXJFbmFibGVk
Q291bnQoMCkKLSAgICAsIG1fZ2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKKyAgICAsIG1fcHJp
bWl0aXZlR2lnYWNhZ2VFbmFibGVkKElzV2F0Y2hlZCkKICAgICAsIG1fY29udHJvbEZsb3dQcm9m
aWxlckVuYWJsZWRDb3VudCgwKQogICAgICwgbV9zaGFkb3dDaGlja2VuKHN0ZDo6bWFrZV91bmlx
dWU8U2hhZG93Q2hpY2tlbj4oKSkKIHsKQEAgLTI5MCw3ICsyOTQsNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaW5pdGlhbGl6ZUhvc3RDYWxsUmV0dXJu
VmFsdWUoKTsgLy8gVGhpcyBpcyBuZWVkZWQgdG8gY29udmluY2UgdGhlIGxpbmtlciBub3QgdG8g
ZHJvcCBob3N0IGNhbGwgcmV0dXJuIHN1cHBvcnQuCiAjZW5kaWYKICAgICAKLSAgICBHaWdhY2Fn
ZTo6YWRkRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7Cisg
ICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOwogCiAgICAgaGVhcC5ub3RpZnlJc1NhZmVUb0NvbGxl
Y3QoKTsKICAgICAKQEAgLTM1NCw3ICszNTgsNyBAQCBWTTo6flZNKCkKIHsKICAgICBhdXRvIGRl
c3RydWN0aW9uTG9ja2VyID0gaG9sZExvY2soc19kZXN0cnVjdGlvbkxvY2sucmVhZCgpKTsKICAg
ICAKLSAgICBHaWdhY2FnZTo6cmVtb3ZlRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJsZWRD
YWxsYmFjaywgdGhpcyk7CisgICAgR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxs
YmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOwogICAgIHByb21p
c2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmluZ1Rhc2tzKCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIGlmIChXYXNtOjpleGlzdGluZ1dvcmtsaXN0T3JOdWxsKCkpCkBAIC00MjMsMjEg
KzQyNywyMSBAQCBWTTo6flZNKCkKICNlbmRpZgogfQogCi12b2lkIFZNOjpnaWdhY2FnZURpc2Fi
bGVkQ2FsbGJhY2sodm9pZCogYXJndW1lbnQpCit2b2lkIFZNOjpwcmltaXRpdmVHaWdhY2FnZURp
c2FibGVkQ2FsbGJhY2sodm9pZCogYXJndW1lbnQpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8Vk0qPihh
cmd1bWVudCktPmdpZ2FjYWdlRGlzYWJsZWQoKTsKKyAgICBzdGF0aWNfY2FzdDxWTSo+KGFyZ3Vt
ZW50KS0+cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogfQogCi12b2lkIFZNOjpnaWdhY2Fn
ZURpc2FibGVkKCkKK3ZvaWQgVk06OnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKQogewogICAg
IGlmIChtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpIHsKLSAgICAgICAg
bV9naWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIkdpZ2FjYWdlIGRpc2FibGVkIik7Cisg
ICAgICAgIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJQcmltaXRp
dmUgZ2lnYWNhZ2UgZGlzYWJsZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAKICAgICAv
LyBUaGlzIGlzIHRvdGFsbHkgcmFjeSwgYW5kIHRoYXQncyBPSy4gVGhlIHBvaW50IGlzLCBpdCdz
IHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IHRoZXkgcGFzcyB0aGUKICAgICAvLyB1bmNh
Z2VkIGJ1ZmZlciBpbiBhIG5pY2VseSBzeW5jaHJvbml6ZWQgbWFubmVyLgotICAgIG1fbmVlZFRv
RmlyZUdpZ2FjYWdlRW5hYmxlZCA9IHRydWU7CisgICAgbV9uZWVkVG9GaXJlUHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBWTTo6c2V0TGFzdFN0YWNrVG9wKHZvaWQq
IGxhc3RTdGFja1RvcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNp
b24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+CkBAIC05NSw2
ICs5Niw4IEBAIGNsYXNzIERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEV4Y2VwdGlvblNjb3BlOworY2xhc3MgRmFzdE1h
bGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3I7CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNz
IFR5cGVQcm9maWxlckxvZzsKQEAgLTI4NSw3ICsyODgsMzAgQEAgcHJpdmF0ZToKIHB1YmxpYzoK
ICAgICBIZWFwIGhlYXA7CiAgICAgCi0gICAgU3Vic3BhY2UgYXV4aWxpYXJ5U3BhY2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBmYXN0TWFs
bG9jQWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3I+IHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRv
cjsKKyAgICAKKyAgICBTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAv
LyBUeXBlZCBhcnJheXMsIHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgorICAgIFN1
YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJy
YXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KKworICAgIC8vIFdlIG1ha2UgY3Jvc3MtY3V0
dGluZyBhc3N1bXB0aW9ucyBhYm91dCB0eXBlZCBhcnJheXMgYmVpbmcgaW4gdGhlIHByaW1pdGl2
ZSBHaWdhY2FnZSBhbmQgYnV0dGVyZmxpZXMKKyAgICAvLyBiZWluZyBpbiB0aGUgSlNWYWx1ZSBn
aWdhY2FnZS4gRm9yIHNvbWUgdHlwZXMsIGl0J3Mgc3VwZXIgb2J2aW91cyB3aGVyZSB0aGV5IHNo
b3VsZCBnbywgYW5kIHNvIHdlCisgICAgLy8gY2FuIGhhcmRjb2RlIHRoYXQgZmFjdC4gQnV0IHNv
bWV0aW1lcyBpdCdzIG5vdCBjbGVhciwgc28gd2UgYWJzdHJhY3QgaXQgYnkgaGF2aW5nIGEgR2ln
YWNhZ2U6OktpbmQKKyAgICAvLyBjb25zdGFudCBzb21ld2hlcmUuCisgICAgLy8gRklYTUU6IE1h
eWJlIGl0IHdvdWxkIGJlIGJldHRlciBpZiBldmVyeW9uZSBhYnN0cmFjdGVkIHRoaXM/CisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTI0OAorICAgIEFM
V0FZU19JTkxJTkUgU3Vic3BhY2UmIGdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6Oktp
bmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIEdp
Z2FjYWdlOjpQcmltaXRpdmU6CisgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZTsKKyAgICAgICAgY2FzZSBHaWdhY2FnZTo6SlNWYWx1ZToKKyAgICAgICAg
ICAgIHJldHVybiBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsKKyAgICAgICAgfQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gcHJpbWl0
aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsKKyAgICB9CiAgICAgCiAgICAgLy8gV2hlbmV2ZXIg
cG9zc2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4odm0pIHRvIGdldCBvbmUgb2YgdGhl
c2Ugc3Vic3BhY2VzLgogICAgIFN1YnNwYWNlIGNlbGxTcGFjZTsKQEAgLTUyNCwxMSArNTUwLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkKiBsYXN0U3RhY2tUb3AoKSB7IHJldHVybiBtX2xhc3RTdGFj
a1RvcDsgfQogICAgIHZvaWQgc2V0TGFzdFN0YWNrVG9wKHZvaWQqKTsKICAgICAKLSAgICB2b2lk
IGZpcmVHaWdhY2FnZUVuYWJsZWRJZk5lY2Vzc2FyeSgpCisgICAgdm9pZCBmaXJlUHJpbWl0aXZl
R2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbmVlZFRv
RmlyZUdpZ2FjYWdlRW5hYmxlZCkgewotICAgICAgICAgICAgbV9uZWVkVG9GaXJlR2lnYWNhZ2VF
bmFibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2dpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0
aGlzLCAiR2lnYWNhZ2UgZGlzYWJsZWQgYXN5bmNocm9ub3VzbHkiKTsKKyAgICAgICAgaWYgKG1f
bmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCkgeworICAgICAgICAgICAgbV9uZWVk
VG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkID0gZmFsc2U7CisgICAgICAgICAgICBtX3By
aW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiUHJpbWl0aXZlIGdpZ2FjYWdl
IGRpc2FibGVkIGFzeW5jaHJvbm91c2x5Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYzMyw3
ICs2NTksNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBp
dCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwogICAgIAotICAgIElubGluZVdhdGNo
cG9pbnRTZXQmIGdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0dXJuIG1fZ2lnYWNhZ2VFbmFibGVkOyB9
CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkKCkgeyBy
ZXR1cm4gbV9wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQ7IH0KIAogICAgIEJ1aWx0aW5FeGVjdXRh
YmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWlsdGluRXhlY3V0YWJsZXMu
Z2V0KCk7IH0KIApAQCAtNzQxLDggKzc2Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2ZXJpZnlF
eGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZCh1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiYpOwogI2VuZGlmCiAgICAgCi0gICAgc3RhdGljIHZvaWQgZ2lnYWNhZ2VEaXNh
YmxlZENhbGxiYWNrKHZvaWQqKTsKLSAgICB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQoKTsKKyAgICBz
dGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2sodm9pZCopOworICAg
IHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCgpOwogCiAjaWYgRU5BQkxFKEFTU0VNQkxF
UikKICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwpAQCAtNzg3LDggKzgxMyw4IEBAIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlcj4gbV90eXBlUHJvZmlsZXI7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVQcm9maWxlckxvZz4gbV90eXBlUHJvZmlsZXJMb2c7CiAg
ICAgdW5zaWduZWQgbV90eXBlUHJvZmlsZXJFbmFibGVkQ291bnQ7Ci0gICAgYm9vbCBtX25lZWRU
b0ZpcmVHaWdhY2FnZUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIElubGluZVdhdGNocG9pbnRTZXQg
bV9naWdhY2FnZUVuYWJsZWQ7CisgICAgYm9vbCBtX25lZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2Fn
ZUVuYWJsZWQgeyBmYWxzZSB9OworICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9wcmltaXRpdmVH
aWdhY2FnZUVuYWJsZWQ7CiAgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRmxvd1Byb2ZpbGVy
PiBtX2NvbnRyb2xGbG93UHJvZmlsZXI7CiAgICAgdW5zaWduZWQgbV9jb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZENvdW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKG1fbWVtb3JpZXMuc2l6ZSgpID49IG1fbWF4Q291bnQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIE1lbW9yeVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5
bmNHQ0FuZFJldHJ5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0g
R2lnYWNhZ2U6OnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVz
KCkpOworICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gR2lnYWNhZ2U6OnRyeUFsbG9jYXRlVmly
dHVhbFBhZ2VzKEdpZ2FjYWdlOjpQcmltaXRpdmUsIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkp
OwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1lbW9y
eVJlc3VsdChudWxscHRyLCBNZW1vcnlSZXN1bHQ6OlN5bmNHQ0FuZFJldHJ5KTsKICAgICAgICAg
ICAgIApAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGF1dG8gaG9sZGVyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIEdpZ2Fj
YWdlOjpmcmVlVmlydHVhbFBhZ2VzKGJhc2VQdHIsIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkp
OworICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgYmFzZVB0ciwgTWVtb3J5OjpmYXN0TWFwcGVkQnl0ZXMoKSk7CiAgICAgICAgICAgICBt
X21lbW9yaWVzLnJlbW92ZUZpcnN0KGJhc2VQdHIpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MzEyLDcgKzMxMiw3IEBAIFJlZlB0cjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgUGEK
ICAgICBpZiAoIWluaXRpYWxCeXRlcykKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW1v
cnkoaW5pdGlhbCwgbWF4aW11bSkpOwogICAgIAotICAgIHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdh
Y2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7Cisg
ICAgdm9pZCogc2xvd01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2FjYWdl
OjpQcmltaXRpdmUsIFdURjo6cGFnZVNpemUoKSwgaW5pdGlhbEJ5dGVzKTsKICAgICBpZiAoIXNs
b3dNZW1vcnkpIHsKICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVQaHlzaWNhbEJ5dGVzKGlu
aXRpYWxCeXRlcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzMxLDcgKzMzMSw3IEBA
IE1lbW9yeTo6fk1lbW9yeSgpCiAgICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZVZpcnR1
YWxQYWdlcyhtX21lbW9yeSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZzoKLSAgICAgICAgICAgIEdpZ2FjYWdlOjphbGlnbmVkRnJl
ZShtX21lbW9yeSk7CisgICAgICAgICAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUoR2lnYWNhZ2U6
OlByaW1pdGl2ZSwgbV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zNzgsMTMgKzM3OCwxMyBAQCBib29sIE1lbW9yeTo6Z3JvdyhWTSYgdm0sIFBhZ2VD
b3VudCBuZXdTCiAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzogewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtYXhpbXVtKCkuYnl0ZXMoKSAhPSAwKTsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQqIG5ld01lbW9yeSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKFdURjo6cGFn
ZVNpemUoKSwgZGVzaXJlZFNpemUpOworICAgICAgICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2Fn
ZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCks
IGRlc2lyZWRTaXplKTsKICAgICAgICAgaWYgKCFuZXdNZW1vcnkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1fbWVtb3J5LCBtX3NpemUpOwog
ICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld01lbW9yeSkgKyBtX3NpemUsIDAs
IGRlc2lyZWRTaXplIC0gbV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQotICAgICAgICAg
ICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKG1fbWVtb3J5KTsKKyAgICAgICAgICAgIEdpZ2FjYWdl
OjphbGlnbmVkRnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX21lbW9yeSk7CiAgICAgICAgIG1f
bWVtb3J5ID0gbmV3TWVtb3J5OwogICAgICAgICBtX21hcHBlZENhcGFjaXR5ID0gZGVzaXJlZFNp
emU7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDM0
MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTctMDgtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBQcmltaXRpdmUgYXV4aWxpYXJpZXMgYW5kIEpTVmFsdWUgYXV4aWxpYXJpZXMgc2hvdWxkIGhh
dmUgc2VwYXJhdGUgZ2lnYWNhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzQ5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWlycm9ycyB0aGUgY2hhbmdlcyBmcm9tIGJtYWxs
b2MvR2lnYWNhZ2UuaC4KKyAgICAgICAgCisgICAgICAgIEFsc28gaXQgdGVhY2hlcyBDYWdlZFB0
ciBob3cgdG8gcmVhc29uIGFib3V0IG11bHRpcGxlIGdpZ2FjYWdlcy4KKworICAgICAgICAqIHd0
Zi9DYWdlZFB0ci5oOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6Z2V0IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Q2FnZWRQdHI6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAqIHd0Zi9HaWdh
Y2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5TWFsbG9jKToKKyAgICAgICAgKEdpZ2Fj
YWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyk6CisgICAgICAgIChHaWdhY2FnZTo6ZnJlZVZp
cnR1YWxQYWdlcyk6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyk6CisgICAg
ICAgIChHaWdhY2FnZTo6YWxpZ25lZEZyZWUpOgorICAgICAgICAoR2lnYWNhZ2U6OmZyZWUpOgor
ICAgICAgICAqIHd0Zi9HaWdhY2FnZS5oOgorICAgICAgICAoR2lnYWNhZ2U6OmRpc2FibGVQcmlt
aXRpdmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2spOgorICAgICAgICAoR2lnYWNhZ2U6Om5hbWUpOgorICAgICAgICAoR2lnYWNhZ2U6OmJhc2VQ
dHIpOgorICAgICAgICAoR2lnYWNhZ2U6OmNhZ2VkKToKKyAgICAgICAgKEdpZ2FjYWdlOjppc0Nh
Z2VkKToKKyAgICAgICAgKEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKToKKyAgICAgICAgKEdp
Z2FjYWdlOjphbGlnbmVkRnJlZSk6CisgICAgICAgIChHaWdhY2FnZTo6ZnJlZSk6CisgICAgICAg
IChHaWdhY2FnZTo6ZGlzYWJsZUdpZ2FjYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEdpZ2FjYWdl
OjphZGREaXNhYmxlQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92
ZURpc2FibGVDYWxsYmFjayk6IERlbGV0ZWQuCisKIDIwMTctMDgtMDcgIEJyaWFuIEJ1cmcgIDxi
YnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIENBTlZBU19QQVRIIGNvbXBpbGF0aW9u
IGd1YXJkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9XVEYv
d3RmL0NhZ2VkUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDExIEBACiAKIG5hbWVz
cGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8R2lnYWNhZ2U6Oktp
bmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KIGNsYXNzIENhZ2VkUHRyIHsKIHB1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpLaW5kIGtpbmQgPSBwYXNzZWRLaW5kOworICAg
IAogICAgIENhZ2VkUHRyKFQqIHB0ciA9IG51bGxwdHIpCiAgICAgICAgIDogbV9wdHIocHRyKQog
ICAgIHsKQEAgLTQwLDcgKzQyLDcgQEAgcHVibGljOgogICAgIFQqIGdldCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2Vk
KG1fcHRyKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpjYWdlZChraW5kLCBtX3B0cik7CiAg
ICAgfQogICAgIAogICAgIFQqIGdldE1heUJlTnVsbCgpIGNvbnN0CkBAIC02Nyw2ICs2OSw5IEBA
IHB1YmxpYzoKICAgICAKICAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7
IH0KICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAgICBUJiBvcGVyYXRvcltdKEluZGV4VHlwZSBp
bmRleCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CiAgICAgCiBwcml2YXRlOgogICAg
IFQqIG1fcHRyOwpJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAkocmV2aXNpb24gMjIwMzQzKQorKysgU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IGNvbnN0IHZvaWQqIGdfZ2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3BhY2UgR2lnYWNhZ2Ugewog
Ci12b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCit2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6
ZV90IHNpemUpCiB7CiAgICAgYXV0byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jKHNpemUpOwogICAg
IHZvaWQqIHJlYWxSZXN1bHQ7CkBAIC00NywxMiArNDcsMTIgQEAgdm9pZCogdHJ5TWFsbG9jKHNp
emVfdCBzaXplKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkKiB0cnlBbGxvY2F0ZVZp
cnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtp
bmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBPU0FsbG9jYXRvcjo6cmVzZXJ2ZVVuY29t
bWl0dGVkKHNpemUpOwogfQogCi12b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwg
c2l6ZV90IHNpemUpCit2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFzZVB0ciwg
c2l6ZV90IHNpemUpCiB7CiAgICAgT1NBbGxvY2F0b3I6OnJlbGVhc2VEZWNvbW1pdHRlZChiYXNl
UHRyLCBzaXplKTsKIH0KQEAgLTY3LDQyICs2Nyw1MSBAQCBuYW1lc3BhY2UgR2lnYWNhZ2Ugewog
Ly8gYW5kIHN0YXkgc2NyYW1ibGVkIGV4Y2VwdCBqdXN0IGJlZm9yZSB1c2UuCiAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MDM1CiAKLXZvaWQqIHRyeUFsaWdu
ZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGlnbmVk
TWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Ci0gICAg
dm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUs
IGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxv
Yzo6YXBpOjp0cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtp
bmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIGFsaWduZWRGcmVlKHZvaWQqIHApCit2b2lkIGFsaWduZWRGcmVlKEtpbmQga2luZCwg
dm9pZCogcCkKIHsKLSAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6
OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FT
U0VSVChpc0NhZ2VkKGtpbmQsIHApKTsKKyAgICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxv
Yzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCi12b2lk
KiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpCit2b2lkKiB0cnlNYWxsb2MoS2luZCBraW5kLCBzaXpl
X3Qgc2l6ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeU1hbGxvYyhz
aXplLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJt
YWxsb2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAg
ICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGZy
ZWUodm9pZCogcCkKK3ZvaWQgZnJlZShLaW5kIGtpbmQsIHZvaWQqIHApCiB7Ci0gICAgYm1hbGxv
Yzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgaWYgKCFw
KQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWdlZChraW5kLCBwKSk7
CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAg
ICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAotdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFn
ZXMoc2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQs
IHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TGFy
Z2VNZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6ZSgpLCBzaXplLCBibWFsbG9jOjpIZWFwS2lu
ZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TGFyZ2VN
ZW1hbGlnblZpcnR1YWwoV1RGOjpwYWdlU2l6ZSgpLCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChr
aW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCkKK3ZvaWQgZnJl
ZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCkKIHsKLSAgICBi
bWFsbG9jOjphcGk6OmZyZWVMYXJnZVZpcnR1YWwoYmFzZVB0ciwgYm1hbGxvYzo6SGVhcEtpbmQ6
OkdpZ2FjYWdlKTsKKyAgICBpZiAoIWJhc2VQdHIpCisgICAgICAgIHJldHVybjsKKyAgICBSRUxF
QVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIGJhc2VQdHIpKTsKKyAgICBibWFsbG9jOjphcGk6OmZy
ZWVMYXJnZVZpcnR1YWwoYmFzZVB0ciwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdU
Rjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDM0
MykKKysrIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1
ICszNyw0NyBAQCBleHRlcm4gV1RGX0VYUE9SVERBVEEgY29uc3Qgdm9pZCogZ19naWdhCiAKIG5h
bWVzcGFjZSBHaWdhY2FnZSB7CiAKK2VudW0gS2luZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpT
VmFsdWUKK307CisKIGlubGluZSB2b2lkIGVuc3VyZUdpZ2FjYWdlKCkgeyB9Ci1pbmxpbmUgdm9p
ZCBkaXNhYmxlR2lnYWNhZ2UoKSB7IH0KK2lubGluZSB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdh
Y2FnZSgpIHsgfQogaW5saW5lIGJvb2wgc2hvdWxkQmVFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7
IH0KIAotaW5saW5lIHZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9p
ZCopIHsgfQotaW5saW5lIHZvaWQgcmVtb3ZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQq
KSwgdm9pZCopIHsgfQoraW5saW5lIHZvaWQgYWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZv
aWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQoraW5saW5lIHZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopIHsgfQorCitBTFdBWVNfSU5MSU5F
IGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CisgICAgY2FzZSBK
U1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFsdWUiOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQqIGJhc2VQdHIoS2luZCkKK3sKKyAgICByZXR1cm4gZ19naWdhY2FnZUJhc2VQdHI7
Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY2FnZWQoVCogcHRyKSB7IHJl
dHVybiBwdHI7IH0KK2lubGluZSBUKiBjYWdlZChLaW5kLCBUKiBwdHIpIHsgcmV0dXJuIHB0cjsg
fQogCi1pbmxpbmUgYm9vbCBpc0NhZ2VkKGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQor
aW5saW5lIGJvb2wgaXNDYWdlZChLaW5kLCBjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0K
IAotaW5saW5lIHZvaWQqIHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIHsgcmV0dXJuIHRyeUZhc3RBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0K
LWlubGluZSB2b2lkIGFsaWduZWRGcmVlKHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCBzaXplKTsKLWlubGlu
ZSB2b2lkIGZyZWUodm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQoraW5saW5lIHZvaWQqIHRyeUFs
aWduZWRNYWxsb2MoS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsgcmV0dXJu
IHRyeUZhc3RBbGlnbmVkTWFsbG9jKGFsaWdubWVudCwgc2l6ZSk7IH0KK2lubGluZSB2b2lkIGFs
aWduZWRGcmVlKEtpbmQsIHZvaWQqIHApIHsgZmFzdEFsaWduZWRGcmVlKHApOyB9CitXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKTsKK2lubGluZSB2
b2lkIGZyZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0RnJlZShwKTsgfQogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qg
c2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMo
S2luZCwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQ
YWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNl
IEdpZ2FjYWdlCiAjZWxzZQpAQCAtNjMsMTMgKzg1LDEzIEBAIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGZyZWVWaXJ0dWFsUGFnZXMKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAotV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUodm9pZCopOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhzaXplX3QpOwotV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZnJlZSh2b2lkKik7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxpZ25l
ZE1hbGxvYyhLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhbGlnbmVkRnJlZShLaW5kLCB2b2lkKik7CitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmcmVlKEtpbmQsIHZvaWQqKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9j
YXRlVmlydHVhbFBhZ2VzKHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZy
ZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVfdCBzaXplKTsK
K1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwgdm9pZCogYmFz
ZVB0ciwgc2l6ZV90IHNpemUpOwogCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFByaW1pdGl2ZSBhdXhpbGlhcmllcyBh
bmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkxOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKyAgICAgICAgCisgICAgICAgIEFkYXB0
aW5nIHRvIEFQSSBjaGFuZ2VzIC0gd2Ugbm93IHNwZWNpZnkgdGhlIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgZGlmZmVyZW50bHkgYW5kIHdlIG5lZWQgdG8gYmUKKyAgICAgICAgc3BlY2lmaWMgYWJv
dXQgd2hpY2ggR2lnYWNhZ2Ugd2UncmUgdXNpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRh
OjpKU1ZNQ2xpZW50RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR1BV
QnVmZmVyTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OkdQVUJ1ZmZlcik6
CisKIDIwMTctMDgtMDcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMDI5OS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lv
biAyMjAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDogbV9idWls
dGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQotICAgICwgbV9vdXRw
dXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIs
IHZtLmhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkK
LSAgICAsIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIEdsb2Jh
bCBPYmplY3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCAmRmFzdE1hbGxvY0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCBtX291dHB1dENvbnN0cmFpbnRT
cGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0u
ZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29u
c3RyYWludFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmplY3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQi
LCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogewogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVC
dWZmZXJNZXRhbC5tbQkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDExICs0NSwxMSBAQCBHUFVCdWZmZXI6OkdQVUJ1ZmZlcihHUFVEZXZpY2UqIGRldmljZSwgCiAg
ICAgCiAgICAgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOwogICAgIHNpemVfdCBw
YWdlQWxpZ25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHBhZ2VTaXplLCBkYXRhLT5ieXRl
TGVuZ3RoKCkpOwotICAgIHZvaWQqIHBhZ2VBbGlnbmVkQ29weSA9IEdpZ2FjYWdlOjp0cnlBbGln
bmVkTWFsbG9jKHBhZ2VTaXplLCBwYWdlQWxpZ25lZFNpemUpOworICAgIHZvaWQqIHBhZ2VBbGln
bmVkQ29weSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHBhZ2VTaXplLCBwYWdlQWxpZ25lZFNpemUpOwogICAgIGlmICghcGFnZUFsaWduZWRDb3B5KQog
ICAgICAgICByZXR1cm47CiAgICAgbWVtY3B5KHBhZ2VBbGlnbmVkQ29weSwgZGF0YS0+YmFzZUFk
ZHJlc3MoKSwgZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBtX2NvbnRlbnRzID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZUZyb21CeXRlcyhwYWdlQWxpZ25lZENvcHksIGRhdGEtPmJ5dGVMZW5ndGgoKSwg
W10gKHZvaWQqIHB0cikgeyBHaWdhY2FnZTo6YWxpZ25lZEZyZWUocHRyKTsgfSk7CisgICAgbV9j
b250ZW50cyA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMocGFnZUFsaWduZWRDb3B5LCBk
YXRhLT5ieXRlTGVuZ3RoKCksIFtdICh2b2lkKiBwdHIpIHsgR2lnYWNhZ2U6OmFsaWduZWRGcmVl
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHB0cik7IH0pOwogICAgIG1fY29udGVudHMtPnJlZigpOwog
ICAgIEFycmF5QnVmZmVyKiBjYXB0dXJlZENvbnRlbnRzID0gbV9jb250ZW50cy5nZXQoKTsKICAg
ICBtX2J1ZmZlciA9IGFkb3B0TlMoKE1UTEJ1ZmZlciAqKVtkZXZpY2UtPnBsYXRmb3JtRGV2aWNl
KCkgbmV3QnVmZmVyV2l0aEJ5dGVzTm9Db3B5Om1fY29udGVudHMtPmRhdGEoKSBsZW5ndGg6cGFn
ZUFsaWduZWRTaXplIG9wdGlvbnM6TVRMUmVzb3VyY2VPcHRpb25DUFVDYWNoZU1vZGVEZWZhdWx0
IGRlYWxsb2NhdG9yOl4odm9pZCosIE5TVUludGVnZXIpIHsgY2FwdHVyZWRDb250ZW50cy0+ZGVy
ZWYoKTsgfV0pOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDgtMDYg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBQcmltaXRpdmUgYXV4
aWxpYXJpZXMgYW5kIEpTVmFsdWUgYXV4aWxpYXJpZXMgc2hvdWxkIGhhdmUgc2VwYXJhdGUgZ2ln
YWNhZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzQ5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoZSBkaXNhYmxlIGNhbGxiYWNrIGlzIGFsbCBhYm91dCB0aGUgcHJpbWl0aXZlIGdp
Z2FjYWdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Om1f
d2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKToKKyAgICAgICAgKFdlYktpdDo6Z2lnYWNhZ2VEaXNh
YmxlZCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMDcgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIENBTlZBU19QQVRIIGNvbXBpbGF0aW9uIGd1YXJkCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAzNDMp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgY29uc3QgU2Vjb25kcyBub25WaXNpYmxlUHJv
Y2Vzc0NsCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdm9pZCBnaWdhY2FnZURpc2Fi
bGVkKHZvaWQqKQorc3RhdGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCh2b2lkKikK
IHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTIwMyw3ICsyMDMsNyBA
QCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICAgICB9KTsKIAogICAgIGlmIChHaWdhY2FnZTo6
c2hvdWxkQmVFbmFibGVkKCkpCi0gICAgICAgIEdpZ2FjYWdlOjphZGREaXNhYmxlQ2FsbGJhY2so
Z2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0cik7CisgICAgICAgIEdpZ2FjYWdlOjphZGRQcmltaXRp
dmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0cik7CiB9
CiAKIFdlYlByb2Nlc3M6On5XZWJQcm9jZXNzKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIy
MDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY4IEBACisyMDE3LTA4LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgUHJpbWl0aXZlIGF1eGlsaWFyaWVzIGFuZCBKU1ZhbHVlIGF1eGlsaWFyaWVzIHNo
b3VsZCBoYXZlIHNlcGFyYXRlIGdpZ2FjYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVjZXMgdHdvIGtpbmRzIG9m
IEdpZ2FjYWdlLCBQcmltaXRpdmUgYW5kIEpTVmFsdWUuIFRoaXMgdHJhbnNsYXRlcyB0byB0d28g
a2luZHMgb2YKKyAgICAgICAgSGVhcEtpbmQsIFByaW1pdGl2ZUdpZ2FjYWdlIGFuZCBKU1ZhbHVl
R2lnYWNhZ2UuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IHN1cHBvcnQgZnVuY3Rpb25hbGl0
eSByZXF1aXJlZCB0dXJuaW5nIElubGluZS5oIGludG8gQklubGluZS5oLCBhbmQgSU5MSU5FIGlu
dG8gQklOTElORSwgYW5kCisgICAgICAgIE5PX0lOTElORSBpbnRvIEJOT19JTkxJTkUuCisKKyAg
ICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1h
bGxvYy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWZpbGxB
bGxvY2F0b3JTbG93Q2FzZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFs
bG9jYXRvcik6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2UpOgor
ICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyk6CisgICAg
ICAgICogYm1hbGxvYy9Bc3luY1Rhc2suaDoKKyAgICAgICAgKiBibWFsbG9jL0JJbmxpbmUuaDog
Q29waWVkIGZyb20gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaC4KKyAgICAgICAgKiBi
bWFsbG9jL0NhY2hlLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZVNs
b3dDYXNlTnVsbENhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZVNsb3dD
YXNlTnVsbENhY2hlKToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjpkZWFsbG9jYXRlU2xvd0Nh
c2VOdWxsQ2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnJlYWxsb2NhdGVTbG93Q2Fz
ZU51bGxDYWNoZSk6CisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAg
ICogYm1hbGxvYy9HaWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6UHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrczo6UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyk6CisgICAgICAgIChHaWdh
Y2FnZTo6ZW5zdXJlR2lnYWNhZ2UpOgorICAgICAgICAoR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRp
dmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sp
OgorICAgICAgICAoR2lnYWNhZ2U6OkNhbGxiYWNrczo6Q2FsbGJhY2tzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEdpZ2FjYWdlOjpkaXNhYmxlR2lnYWNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoR2ln
YWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6
cmVtb3ZlRGlzYWJsZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0dpZ2Fj
YWdlLmg6CisgICAgICAgIChHaWdhY2FnZTo6bmFtZSk6CisgICAgICAgIChHaWdhY2FnZTo6YmFz
ZVB0cik6CisgICAgICAgIChHaWdhY2FnZTo6Zm9yRWFjaEtpbmQpOgorICAgICAgICAoR2lnYWNh
Z2U6OmNhZ2VkKToKKyAgICAgICAgKEdpZ2FjYWdlOjppc0NhZ2VkKToKKyAgICAgICAgKiBibWFs
bG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjp1c2luZ0dpZ2FjYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6Omdp
Z2FjYWdlQmFzZVB0cik6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1h
bGxvYy9IZWFwS2luZC5oOgorICAgICAgICAoYm1hbGxvYzo6aXNHaWdhY2FnZSk6CisgICAgICAg
IChibWFsbG9jOjpnaWdhY2FnZUtpbmQpOgorICAgICAgICAoYm1hbGxvYzo6aGVhcEtpbmQpOgor
ICAgICAgICAqIGJtYWxsb2MvSW5saW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogYm1hbGxvYy9N
YXAuaDoKKyAgICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6
OlBlclByb2Nlc3M8VD46OmdldEZhc3RDYXNlKToKKyAgICAgICAgKGJtYWxsb2M6OlBlclByb2Nl
c3M8VD46OmdldCk6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzPFQ+OjpnZXRTbG93Q2Fz
ZSk6CisgICAgICAgICogYm1hbGxvYy9QZXJUaHJlYWQuaDoKKyAgICAgICAgKGJtYWxsb2M6OlBl
clRocmVhZDxUPjo6Z2V0RmFzdENhc2UpOgorICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnB1c2gpOgorICAgICAgICAoYm1hbGxvYzo6VmVj
dG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46Omdy
b3dDYXBhY2l0eSk6CisKIDIwMTctMDgtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBJZiBHaWdhY2FnZSBpcyBkaXNhYmxlZCwgYm1hbGxvYyBzaG91bGQgc2Vy
dmljZSBsYXJnZSBhbGlnbmVkIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3RzIHRocm91Z2ggdm1B
bGxvY2F0ZQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBACiAJCTE0REQ3OEM2MThGNDhENzUwMDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjUyMThCQTg4QTAwMDc2
RkEzRiAvKiBBc3luY1Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjgxODlFRURF
NDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRWZWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDlEQjQ1
MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBJ
bmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyog
QklubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQTE4RjQ4RDc1MDA5NTA3MDIg
LyogTXV0ZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NERDRUQ2MTdBNjQ5RDkwMDkzQjJGMiAvKiBNdXRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENCMThGNDhENzUwMDk1MDcwMiAv
KiBQZXJQcm9jZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENDMThGNDhENzUw
MDk1MDcwMiAvKiBQZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQsNyArOTQs
NyBAQAogCQkxNDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJ1bXBSYW5nZS5oOyBwYXRoID0gYm1hbGxvYy9CdW1w
UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRkEwMDQxOUNFNEI2ODAw
RkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBMaW5lTWV0YWRhdGEuaDsgcGF0aCA9IGJtYWxsb2MvTGluZU1ldGFkYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBPYmplY3RU
eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9iamVjdFR5cGUu
Y3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJbmxpbmUuaDsgcGF0aCA9IGJtYWxsb2MvSW5saW5lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAv
KiBCSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJJbmxpbmUuaDsg
cGF0aCA9IGJtYWxsb2MvQklubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5oOyBwYXRo
ID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyogU3lz
Y2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxsLmg7IHBhdGgg
PSBibWFsbG9jL1N5c2NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4Nywx
MCArMjg3LDEwIEBACiAJCQkJNjU5OUM1Q0IxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1l
bW9yeS5oICovLAogCQkJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8s
CiAJCQkJMEY1QkYxNzIxRjIzQzU3MTAwMjlEOTFEIC8qIEJFeHBvcnQuaCAqLywKKwkJCQkxNDEz
RTQ2MDE4OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovLAogCQkJCTE0QzkxOUM4MThGQ0M1
OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCAqLywKIAkJCQkxNEQ5REI0NTE3RjI0NDcxMDBFQUFC
NzkgLyogRml4ZWRWZWN0b3IuaCAqLywKIAkJCQkwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5MUQgLyog
SGVhcEtpbmQuaCAqLywKLQkJCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5saW5lLmgg
Ki8sCiAJCQkJMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLywKIAkJCQk0NDI2
RTI3RTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNDQyNkUyN0YxQzgz
OEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuaCAqLywKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkJCTE0
REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQwMDI3NDkxOEY4OUMxMzAwMTE1Qzk3IC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNUJGMTQ5MUYyMkE4RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2luZC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBMYXJnZU1hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRDODk5MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIExhcmdlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBBbGxvY2F0b3I6OnNjYXZlbmdl
KCkKICAgICB9CiB9CiAKLU5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9y
U2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQorQk5P
X0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2UoQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQogewogICAgIEJ1bXBSYW5nZUNhY2hl
JiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAKQEAgLTE1
OCw3ICsxNTgsNyBAQCBOT19JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvCiAg
ICAgbV9oZWFwLmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzKGxvY2ssIHNpemVDbGFzcywgYWxsb2Nh
dG9yLCBidW1wUmFuZ2VDYWNoZSwgbV9kZWFsbG9jYXRvci5saW5lQ2FjaGUobG9jaykpOwogfQog
Ci1JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCitCSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZp
bGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQog
ewogICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVz
W3NpemVDbGFzc107CiAgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkpCkBAIC0xNjYsMTMg
KzE2NiwxMyBAQCBJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCCiAgICAg
cmV0dXJuIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwogfQogCi1OT19J
TkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQorQk5PX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCiB7CiAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwogICAgIHJl
dHVybiBtX2hlYXAuYWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCi1O
T19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXplX3Qgc2l6
ZSkKK0JOT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXpl
X3Qgc2l6ZSkKIHsKICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6c2l6ZUNsYXNzKHNp
emUpOwogICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6
ZUNsYXNzXTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkocmV2aXNpb24gMjIw
MzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBc3luY1Rhc2tfaAogCiAjaW5jbHVkZSAiQkFz
c2VydC5oIgotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNs
dWRlICJNdXRleC5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSA8YXRvbWljPgpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHJldmlzaW9uIDIyMDM0MykJKGZyb20gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaDoyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5saW5lX2gKKyNk
ZWZpbmUgSW5saW5lX2gKKworI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu
bGluZSkpIGlubGluZQorCisjZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGlu
ZSkpCisKKyNlbmRpZiAvLyBJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9C
SW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJ
KHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgSW5saW5lX2gKLSNkZWZpbmUgSW5saW5lX2gKKyNpZm5kZWYgQklubGluZV9oCisj
ZGVmaW5lIEJJbmxpbmVfaAogCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkgaW5saW5lCisjZGVmaW5lIEJJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu
bGluZSkpIGlubGluZQogCi0jZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGlu
ZSkpCisjZGVmaW5lIEJOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQogCi0jZW5k
aWYgLy8gSW5saW5lX2gKKyNlbmRpZiAvLyBCSW5saW5lX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Q2FjaGUuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Nh
Y2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1
ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgi
CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTQ2LDI3ICs0NiwyNyBAQCBDYWNoZTo6Q2FjaGUo
SGVhcEtpbmQgaGVhcEtpbmQpCiB7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6dHJ5QWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCitC
Tk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBL
aW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhl
YXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS50
cnlBbGxvY2F0ZShzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjphbGxvY2F0ZVNs
b3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJ
TkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtp
bmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2Fj
aGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9jYXRlKHNp
emUpOwogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2Fj
aGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQorQk5P
X0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBo
ZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIFBl
clRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFwS2luZCku
YWxsb2NhdG9yKCkuYWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZv
aWQgQ2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwg
dm9pZCogb2JqZWN0KQorQk5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VO
dWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKIHsKICAgICBQZXJUaHJl
YWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmRlYWxs
b2NhdG9yKCkuZGVhbGxvY2F0ZShvYmplY3QpOwogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6
OnJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2Jq
ZWN0LCBzaXplX3QgbmV3U2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnJlYWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBzaXplX3Qg
bmV3U2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46Omdl
dFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5yZWFsbG9jYXRlKG9iamVjdCwg
bmV3U2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJC
QXNzZXJ0LmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5j
bHVkZSAiRGVhbGxvY2F0b3IuaCIKICNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKICNpbmNsdWRlICJI
ZWFwLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUGVyUHJvY2Vzcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvR2lnYWNhZ2UuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0dpZ2FjYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAogCiAv
LyBGSVhNRTogQXNrIGR5bGQgdG8gcHV0IHRoaXMgaW4gaXRzIG93biBwYWdlLCBhbmQgbXByb3Rl
Y3QgdGhlIHBhZ2UgYWZ0ZXIgd2UgZW5zdXJlIHRoZSBnaWdhY2FnZS4KIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5NzIKLXZvaWQqIGdfZ2lnYWNhZ2VCYXNl
UHRyOwordm9pZCogZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7Cit2b2lkKiBnX2pzVmFsdWVH
aWdhY2FnZUJhc2VQdHI7CiAKIHVzaW5nIG5hbWVzcGFjZSBibWFsbG9jOwogCkBAIC01Myw4ICs1
NCw4IEBAIHN0cnVjdCBDYWxsYmFjayB7CiAgICAgdm9pZCogYXJndW1lbnQgeyBudWxscHRyIH07
CiB9OwogCi1zdHJ1Y3QgQ2FsbGJhY2tzIHsKLSAgICBDYWxsYmFja3Moc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpIHsgfQorc3RydWN0IFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3Mgewor
ICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3Moc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYpIHsgfQogICAgIAogICAgIFZlY3RvcjxDYWxsYmFjaz4gY2FsbGJhY2tzOwogfTsKQEAgLTY5
LDUyICs3MCw1NyBAQCB2b2lkIGVuc3VyZUdpZ2FjYWdlKCkKICAgICAgICAgICAgIGlmICghc2hv
dWxkQmVFbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2b2lkKiBiYXNlUHRyID0gdHJ5Vk1BbGxvY2F0ZShHSUdBQ0FHRV9TSVpFLCBH
SUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKLSAgICAgICAgICAgIGlmICghYmFzZVB0
cikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZt
RGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoYmFzZVB0ciwgR0lHQUNBR0VfU0laRSArIEdJR0FDQUdF
X1JVTldBWSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGdfZ2lnYWNhZ2VCYXNlUHRyID0g
YmFzZVB0cjsKKyAgICAgICAgICAgIGZvckVhY2hLaW5kKAorICAgICAgICAgICAgICAgIFsmXSAo
S2luZCBraW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSYW5kb21pemUgd2hl
cmUgdGhpcyBnb2VzLgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ1CisgICAgICAgICAgICAgICAgICAgIGJhc2VQdHIo
a2luZCkgPSB0cnlWTUFsbG9jYXRlKEdJR0FDQUdFX1NJWkUsIEdJR0FDQUdFX1NJWkUgKyBHSUdB
Q0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2VQdHIoa2luZCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRkFUQUw6IENvdWxkIG5v
dCBhbGxvY2F0ZSAlcyBnaWdhY2FnZS5cbiIsIG5hbWUoa2luZCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQkNSQVNIKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXMoYmFz
ZVB0cihraW5kKSwgR0lHQUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldBWSk7CisgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwogI2VuZGlmIC8vIEdJR0FDQUdFX0VOQUJMRUQKIH0KIAot
dm9pZCBkaXNhYmxlR2lnYWNhZ2UoKQordm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKQog
ewogICAgIGVuc3VyZUdpZ2FjYWdlKCk7Ci0gICAgaWYgKCFnX2dpZ2FjYWdlQmFzZVB0cikgewor
ICAgIGlmICghZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIpIHsKICAgICAgICAgLy8gSXQgd2Fz
IG5ldmVyIGVuYWJsZWQuIFRoYXQgbWVhbnMgdGhhdCB3ZSBuZXZlciBldmVuIHNhdmVkIGFueSBj
YWxsYmFja3MuIE9yLCB3ZSBoYWQgYWxyZWFkeSBkaXNhYmxlZAogICAgICAgICAvLyBpdCBiZWZv
cmUsIGFuZCBhbHJlYWR5IGNhbGxlZCB0aGUgY2FsbGJhY2tzLgogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIENhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8Q2FsbGJh
Y2tzPjo6Z2V0KCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPENhbGxiYWNrcz46Om11dGV4KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+Ojpn
ZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOwogICAgIGZvciAoQ2FsbGJhY2sm
IGNhbGxiYWNrIDogY2FsbGJhY2tzLmNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2suZnVuY3Rp
b24oY2FsbGJhY2suYXJndW1lbnQpOwogICAgIGNhbGxiYWNrcy5jYWxsYmFja3Muc2hyaW5rKDAp
OwotICAgIGdfZ2lnYWNhZ2VCYXNlUHRyID0gbnVsbHB0cjsKKyAgICBnX3ByaW1pdGl2ZUdpZ2Fj
YWdlQmFzZVB0ciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgYWRkRGlzYWJsZUNhbGxiYWNrKHZvaWQg
KCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgYWRkUHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKIHsK
ICAgICBlbnN1cmVHaWdhY2FnZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIpIHsKKyAg
ICBpZiAoIWdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0IHdhcyBh
bHJlYWR5IGRpc2FibGVkIG9yIHdlIHdlcmUgbmV2ZXIgYWJsZSB0byBlbmFibGUgaXQuCiAgICAg
ICAgIGZ1bmN0aW9uKGFyZ3VtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgpOwot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxsYmFj
a3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3Mg
PSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAgc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2Fi
bGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2Fs
bGJhY2soZnVuY3Rpb24sIGFyZ3VtZW50KSk7CiB9CiAKLXZvaWQgcmVtb3ZlRGlzYWJsZUNhbGxi
YWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgcmVtb3Zl
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBh
cmd1bWVudCkKIHsKLSAgICBDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxi
YWNrcz46OmdldCgpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVy
UHJvY2VzczxDYWxsYmFja3M+OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6
Z2V0KCk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNz
PFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNhbGxiYWNrcy5jYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYg
KGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uZnVuY3Rpb24gPT0gZnVuY3Rpb24KICAgICAgICAgICAg
ICYmIGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uYXJndW1lbnQgPT0gYXJndW1lbnQpIHsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkJFeHBvcnQuaCIKKyNpbmNsdWRl
ICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCiAjaW5jbHVkZSA8aW50dHlwZXMu
aD4KIApAQCAtNDQsMjMgKzQ1LDYwIEBACiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMAogI2Vu
ZGlmCiAKLWV4dGVybiAiQyIgQkVYUE9SVCB2b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK2V4dGVy
biAiQyIgQkVYUE9SVCB2b2lkKiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK2V4dGVybiAi
QyIgQkVYUE9SVCB2b2lkKiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CiAKIG5hbWVzcGFjZSBH
aWdhY2FnZSB7CiAKK2VudW0gS2luZCB7CisgICAgUHJpbWl0aXZlLAorICAgIEpTVmFsdWUKK307
CisKIEJFWFBPUlQgdm9pZCBlbnN1cmVHaWdhY2FnZSgpOwogCi1CRVhQT1JUIHZvaWQgZGlzYWJs
ZUdpZ2FjYWdlKCk7CitCRVhQT1JUIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCk7CisK
Ky8vIFRoaXMgd2lsbCBjYWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGlmIHRo
ZSBQcmltaXRpdmUgR2lnYWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgorQkVYUE9SVCB2b2lk
IGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKK0JF
WFBPUlQgdm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCop
LCB2b2lkKik7CisKK0JJTkxJTkUgY29uc3QgY2hhciogbmFtZShLaW5kIGtpbmQpCit7CisgICAg
c3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAgICAgIHJldHVybiAiUHJp
bWl0aXZlIjsKKyAgICBjYXNlIEpTVmFsdWU6CisgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7Cisg
ICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitCSU5MSU5FIHZv
aWQqJiBiYXNlUHRyKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyOwor
ICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuIGdfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0
cjsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIGdfcHJpbWl0aXZlR2lnYWNhZ2VC
YXNlUHRyOworfQogCi0vLyBUaGlzIHdpbGwgY2FsbCB0aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1l
ZGlhdGVseSBpZiB0aGUgR2lnYWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgotQkVYUE9SVCB2
b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKLUJFWFBPUlQg
dm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBmb3JFYWNoS2luZChjb25zdCBGdW5jJiBmdW5jKQor
eworICAgIGZ1bmMoUHJpbWl0aXZlKTsKKyAgICBmdW5jKEpTVmFsdWUpOworfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVCogY2FnZWQoVCogcHRyKQorQklOTElORSBUKiBjYWdlZChLaW5kIGtp
bmQsIFQqIHB0cikKIHsKICAgICBCQVNTRVJUKHB0cik7Ci0gICAgdm9pZCogZ2lnYWNhZ2VCYXNl
UHRyID0gZ19naWdhY2FnZUJhc2VQdHI7CisgICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyID0gYmFz
ZVB0cihraW5kKTsKICAgICBpZiAoIWdpZ2FjYWdlQmFzZVB0cikKICAgICAgICAgcmV0dXJuIHB0
cjsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oCkBAIC02OCw5ICsxMDYsOSBAQCBU
KiBjYWdlZChUKiBwdHIpCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cHRyKSAmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oR0lHQUNBR0VfTUFTSykpKTsKIH0KIAotaW5s
aW5lIGJvb2wgaXNDYWdlZChjb25zdCB2b2lkKiBwdHIpCitCSU5MSU5FIGJvb2wgaXNDYWdlZChL
aW5kIGtpbmQsIGNvbnN0IHZvaWQqIHB0cikKIHsKLSAgICByZXR1cm4gY2FnZWQocHRyKSA9PSBw
dHI7CisgICAgcmV0dXJuIGNhZ2VkKGtpbmQsIHB0cikgPT0gcHRyOwogfQogCiBCRVhQT1JUIGJv
b2wgc2hvdWxkQmVFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlz
aW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDggKzU5LDggQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6Omxv
Y2tfZ3VhcgogICAgICAgICBHaWdhY2FnZTo6ZW5zdXJlR2lnYWNhZ2UoKTsKICNpZiBHSUdBQ0FH
RV9FTkFCTEVECiAgICAgICAgIGlmICh1c2luZ0dpZ2FjYWdlKCkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfQkFTU0VSVChnX2dpZ2FjYWdlQmFzZVB0cik7Ci0gICAgICAgICAgICBtX2xhcmdlRnJl
ZS5hZGQoTGFyZ2VSYW5nZShnX2dpZ2FjYWdlQmFzZVB0ciwgR0lHQUNBR0VfU0laRSwgMCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKGdpZ2FjYWdlQmFzZVB0cigpKTsKKyAgICAgICAg
ICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGdpZ2FjYWdlQmFzZVB0cigpLCBHSUdBQ0FH
RV9TSVpFLCAwKSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTcwLDcgKzcwLDEyIEBA
IEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIKIAogYm9vbCBIZWFwOjp1
c2luZ0dpZ2FjYWdlKCkKIHsKLSAgICByZXR1cm4gbV9raW5kID09IEhlYXBLaW5kOjpHaWdhY2Fn
ZSAmJiBnX2dpZ2FjYWdlQmFzZVB0cjsKKyAgICByZXR1cm4gaXNHaWdhY2FnZShtX2tpbmQpICYm
IGdpZ2FjYWdlQmFzZVB0cigpOworfQorCit2b2lkKiBIZWFwOjpnaWdhY2FnZUJhc2VQdHIoKQor
eworICAgIHJldHVybiBHaWdhY2FnZTo6YmFzZVB0cihnaWdhY2FnZUtpbmQobV9raW5kKSk7CiB9
CiAKIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0hlYXAuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB+SGVhcCgp
ID0gZGVsZXRlOwogICAgIAogICAgIGJvb2wgdXNpbmdHaWdhY2FnZSgpOworICAgIHZvaWQqIGdp
Z2FjYWdlQmFzZVB0cigpOyAvLyBNYXkgY3Jhc2ggaWYgIXVzaW5nR2lnYWNhZ2UoKS4KICAgICAK
ICAgICB2b2lkIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKICAgICB2b2lkIGluaXRpYWxpemVQ
YWdlTWV0YWRhdGEoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHJldmlzaW9u
IDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTQgKzI1LDU5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQkFz
c2VydC5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKKyNpbmNsdWRlICJHaWdhY2FnZS5oIgorCiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIGVudW0gY2xhc3MgSGVhcEtpbmQgewogICAgIFByaW1hcnks
Ci0gICAgR2lnYWNhZ2UKKyAgICBQcmltaXRpdmVHaWdhY2FnZSwKKyAgICBKU1ZhbHVlR2lnYWNh
Z2UKIH07CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtSGVhcHMgPSAyOworc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDM7CisKK0JJTkxJTkUgYm9vbCBpc0dpZ2Fj
YWdlKEhlYXBLaW5kIGhlYXBLaW5kKQoreworICAgIHN3aXRjaCAoaGVhcEtpbmQpIHsKKyAgICBj
YXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBI
ZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgY2FzZSBIZWFwS2luZDo6SlNWYWx1ZUdp
Z2FjYWdlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitCSU5MSU5FIEdpZ2FjYWdlOjpLaW5kIGdpZ2FjYWdlS2luZChI
ZWFwS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSGVhcEtpbmQ6
OlByaW1hcnk6CisgICAgICAgIEJDUkFTSCgpOworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OlBy
aW1pdGl2ZTsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdhY2FnZToKKyAgICAgICAg
cmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CisgICAgY2FzZSBIZWFwS2luZDo6SlNWYWx1ZUdp
Z2FjYWdlOgorICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OkpTVmFsdWU7CisgICAgfQorICAgIEJD
UkFTSCgpOworICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOworfQorCitCSU5MSU5FIEhl
YXBLaW5kIGhlYXBLaW5kKEdpZ2FjYWdlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBHaWdhY2FnZTo6UHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gSGVhcEtp
bmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOworICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CisgICAg
ICAgIHJldHVybiBIZWFwS2luZDo6SlNWYWx1ZUdpZ2FjYWdlOworICAgIH0KKyAgICBCQ1JBU0go
KTsKKyAgICByZXR1cm4gSGVhcEtpbmQ6OlByaW1hcnk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIGJt
YWxsb2MKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9JbmxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShyZXZpc2lvbiAyMjAzNDMpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCShub25leGlzdGVudCkKQEAgLTEsMzMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIElubGluZV9oCi0jZGVmaW5lIElubGluZV9oCi0KLSNkZWZpbmUgSU5MSU5FIF9fYXR0
cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKLQotI2RlZmluZSBOT19JTkxJTkUgX19h
dHRyaWJ1dGVfXygobm9pbmxpbmUpKQotCi0jZW5kaWYgLy8gSW5saW5lX2gKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9NYXAuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9N
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBNYXBfaAogI2Rl
ZmluZSBNYXBfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgog
I2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvUGVyUHJvY2Vzcy5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1BlclByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2lmbmRlZiBQZXJQcm9jZXNzX2gKICNkZWZpbmUgUGVyUHJvY2Vzc19oCiAKLSNpbmNsdWRlICJJ
bmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNs
dWRlICJTdGF0aWNNdXRleC5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtNzEsMTMgKzcxLDEzIEBA
IHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIFQqIFBlclByb2Nl
c3M8VD46OmdldEZhc3RDYXNlKCkKK0JJTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0RmFzdENh
c2UoKQogewogICAgIHJldHVybiBzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1
bWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46
OmdldCgpCitCSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldCgpCiB7CiAgICAgVCogb2JqZWN0
ID0gZ2V0RmFzdENhc2UoKTsKICAgICBpZiAoIW9iamVjdCkKQEAgLTg2LDcgKzg2LDcgQEAgSU5M
SU5FIFQqIFBlclByb2Nlc3M8VD46OmdldCgpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1O
T19JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0U2xvd0Nhc2UoKQorQk5PX0lOTElORSBUKiBQ
ZXJQcm9jZXNzPFQ+OjpnZXRTbG93Q2FzZSgpCiB7CiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiBsb2NrKHNfbXV0ZXgpOwogICAgIGlmICghc19vYmplY3QubG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9jb25zdW1lKSkgewpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJl
YWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVhZC5oCShy
ZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVhZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIFBlclRocmVhZF9oCiAjZGVm
aW5lIFBlclRocmVhZF9oCiAKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQlBsYXRm
b3JtLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVySGVhcEtpbmQuaCIKICNp
bmNsdWRlICJWTUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CkBAIC0xMTUsNyArMTE1LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvbmNlX2ZsYWcgUGVyVAogI2VuZGlmCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyVGhyZWFkPFQ+OjpnZXRGYXN0Q2FzZSgp
CitCSU5MSU5FIFQqIFBlclRocmVhZDxUPjo6Z2V0RmFzdENhc2UoKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUKj4oUGVyVGhyZWFkU3RvcmFnZTxUPjo6Z2V0KCkpOwogfQpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFZlY3Rvcl9oCiAjZGVmaW5lIFZlY3Rvcl9oCiAKLSNpbmNsdWRlICJJbmxpbmUuaCIKKyNpbmNs
dWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgogI2luY2x1ZGUgPGNzdGRk
ZWY+CiAjaW5jbHVkZSA8Y3N0cmluZz4KQEAgLTExOSw3ICsxMTksNyBAQCBpbmxpbmUgVCYgVmVj
dG9yPFQ+OjpvcGVyYXRvcltdKHNpemVfdCBpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1J
TkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goY29uc3QgVCYgdmFsdWUpCitCSU5MSU5FIHZvaWQg
VmVjdG9yPFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQogewogICAgIGlmIChtX3NpemUgPT0gbV9j
YXBhY2l0eSkKICAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7CkBAIC0yMTIsMTQgKzIxMiwxNCBAQCB2
b2lkIFZlY3RvcjxUPjo6cmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1OT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnNocmlua0NhcGFjaXR5KCkKK0JO
T19JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnNocmlua0NhcGFjaXR5KCkKIHsKICAgICBzaXplX3Qg
bmV3Q2FwYWNpdHkgPSBtYXgoaW5pdGlhbENhcGFjaXR5KCksIG1fY2FwYWNpdHkgLyBzaHJpbmtG
YWN0b3IpOwogICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIHZvaWQgVmVjdG9yPFQ+Ojpncm93Q2FwYWNpdHkoKQor
Qk5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5KCkKIHsKICAgICBzaXplX3Qg
bmV3Q2FwYWNpdHkgPSBtYXgoaW5pdGlhbENhcGFjaXR5KCksIG1fc2l6ZSAqIGdyb3dGYWN0b3Ip
OwogICAgIHJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwo=
</data>
<flag name="review"
          id="337991"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317465</attachid>
            <date>2017-08-07 14:24:49 -0700</date>
            <delta_ts>2017-08-07 14:27:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBA
QAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2
ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgYWRhcHRzIEpTQyB0byB0aGVyZSBiZWluZyB0d28gZ2ln
YWNhZ2VzLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBtYXR0ZXJzIHNpbXBsZXIsIHRoaXMg
dHVybnMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcnMgaW50byBwZXItVk0gaW5zdGFuY2VzIHJhdGhl
ciB0aGFuCisgICAgICAgIHNpbmdsZXRvbnMuIEkgZG9uJ3QgdGhpbmsgd2Ugd2VyZSBnYWluaW5n
IGFueXRoaW5nIGJ5IG1ha2luZyB0aGVtIGJlIHNpbmdsZXRvbnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gdGVhY2ggR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIGtpbmRzIG9mCisgICAgICAgIGdpZ2FjYWdlcy4g
V2UnbGwgaGF2ZSBvbmUgb2YgdGhvc2UgYWxsb2NhdG9ycyBwZXIgY2FnZS4KKyAgICAgICAgCisg
ICAgICAgIEZyb20gdGhlcmUsIHRoaXMgY2hhbmdlIHRlYWNoZXMgZXZlcnlvbmUgd2hvIHByZXZp
b3VzbHkga25ldyBhYm91dCBjYWdlcyB0aGF0IHRoZXJlIGFyZSB0d28gY2FnZXMuCisgICAgICAg
IFRoaXMgbWVhbnMgaGF2aW5nIHRvIHNwZWNpZnkgZWl0aGVyIEdpZ2FjYWdlOjpQcmltaXRpdmUg
b3IgR2lnYWNhZ2U6OkpTVmFsdWUuIEluIG1vc3QgcGxhY2VzLCB0aGlzIGlzCisgICAgICAgIGVh
c3k6IHR5cGVkIGFycmF5cyBhcmUgUHJpbWl0aXZlIGFuZCBidXR0ZXJmbGllcyBhcmUgSlNWYWx1
ZS4gQnV0IHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQncworICAgICAgICBub3Qgc28g
b2J2aW91cywgc28gdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBzb21lIGhlbHBlcnMgdG8gbWFrZSBp
dCBlYXN5IHRvIGRlZmluZSB3aGF0IGNhZ2UgeW91IHdhbnQKKyAgICAgICAgdG8gdXNlIGluIG9u
ZSBwbGFjZSBhbmQgcmVmZXIgdG8gaXQgYWJzdHJhY3RseS4gV2UgZG8gdGhpcyBpbiBEaXJlY3RB
cmd1bWVudHMgYW5kIEdlbmVyaWNBcmd1bWVudHMuaAorICAgICAgICAKKyAgICAgICAgQSBsb3Qg
b2YgdGhlIG1hZ2ljIG9mIHRoaXMgY2hhbmdlIGlzIGR1ZSB0byBDYWdlZEJhcnJpZXJQdHIsIHdo
aWNoIGNvbWJpbmVzIEF1eGlsaWFyeUJhcnJpZXIgYW5kCisgICAgICAgIENhZ2VkUHRyLiBUaGlz
IHJlbW92ZXMgb25lIGxheWVyIG9mICJnZXQoKSIgY2FsbHMgZnJvbSBhIGJ1bmNoIG9mIHBsYWNl
cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmZseSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldERpcmVjdFBuYW1lKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjphbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjYWdlZCk6CisgICAgICAgICogaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OjppbnN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oOgorICAgICAgICAqIGhlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeSk6CisgICAg
ICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRNZW1v
cnkpOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAg
Y29uc3QpOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChwcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkKToKKyAgICAgICAgKGpzY21haW4pOgorICAgICAgICAoZ2lnYWNhZ2VEaXNhYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlC
dWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6
Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oOgorICAgICAgICAqIHJ1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FnZWRCYXJyaWVyUHRyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQ
dHI6OkNhZ2VkQmFycmllclB0cik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6OnNldCk6CisgICAgICAgIChKU0M6
OkNhZ2VkQmFycmllclB0cjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVy
UHRyOjpnZXRNYXlCZU51bGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJh
dG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yIGJv
b2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6OnNldFdpdGhvdXRCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvciogY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRz
OjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6dW5tYXBB
cmd1bWVudCk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjppc01hcHBlZEFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOgorICAgICAgICAoSlNDOjpI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVu
dGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw6OnJlaGFzaCk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlc3RyaWN0ZWQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBvcCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpm
YXN0U2xpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXku
aDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkaWRBY3F1aXJlTG9jayk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoZWFwU25hcHNo
b3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRV
bmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lk
ZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9D
b250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFy
cmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91Ymxl
VG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseVRv
VW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmRleGVkRGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJh
eUxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1
aWNrbHkgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzU3BhcnNlTWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNlSW5kZXhpbmdN
b2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSBjb25zdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0
T2ZMaW5lU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUludDMyKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aDoKKyAgICAgICAgKEpTQzo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNh
Z2VEaXNhYmxlZENhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6Vk06OnByaW1pdGl2ZUdpZ2FjYWdl
RGlzYWJsZWQpOgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlRGlzYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6Vk06OnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZCk6CisgICAgICAgIChKU0M6OlZNOjpmaXJlR2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VFbmFibGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisKIDIwMTctMDgtMDcgIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjIyMDI5OS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw5ICsz
ODAyLDkgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBib29sIGlzVwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitz
dGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewotICAgIGRhdGFM
b2coIkdpZ2FjYWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOworICAgIGRhdGFMb2coIlByaW1p
dGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCEgQWJvcnRpbmcuXG4iKTsKICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKIH0KIApAQCAtMzgyNyw3ICszODI3LDcgQEAgaW50IGpzY21haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOwog
I2VuZGlmCiAgICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQoKSkKLSAgICAgICAgR2ln
YWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKKyAg
ICAgICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkLCBudWxscHRyKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0g
cnVuSlNDKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDM0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsNiArODk4LDcgQEAKIAkJMEZFQzND
NTcxRjMzQTQ1MzAwRjU5QjZDIC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1NTFG
MzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDM0M1QTFG
MzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzU4MUYzM0E0
ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovOyB9Owog
CQkwRkVDM0M1QjFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
M0M1OTFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
Ki87IH07CisJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzVGMUYz
NzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovOyB9OwogCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJl
Z1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CiAJ
CTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CkBAIC0zNDk2LDYgKzM0OTcsNyBAQAogCQkw
RkVDM0M1NTFGMzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNDNTgxRjMzQTQ4OTAwRjU5QjZDIC8q
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVDM0M1OTFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlC
NkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkQmFycmllclB0ci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQg
LyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNTFCREFDREFDMDA4
MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjIyLDYgKzY2MjQsNyBAQAogCQkJCTlFNzI5NDA5MTkw
RjAzMDYwMDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgw
MEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIg
LyogQnV0dGVyZmx5SW5saW5lcy5oICovLAorCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyog
Q2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0
YS5oICovLAogCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAq
LywKQEAgLTg2MzksNiArODY0Miw3IEBACiAJCQkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8q
IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDRE
OTA2MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFy
cmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8q
IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg5
OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIy
MDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7
CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0
aGlzIGNhc2Ugd291bGQgc3VjayEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDcgKzEwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogICAgIAogICAg
IGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
aml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgeworICAgICAgICBp
ZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
IG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCkBAIC03ODY4LDcgKzc4NjgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6
ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAK
LSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvcihzaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihz
aXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC03OTEzLDcgKzc5MTMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1Np
emUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXpl
ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2pp
dC52bSgpLT5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwpAQCAtODQ5NCw3ICs4NDk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYQogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIofjcpLCBzY3JhdGNoR1BS
KTsKICAgICB9CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAgICAg
c3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIsCisgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPnByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCiAgICAgICAgIHNjcmF0Y2hH
UFIyLCBzbG93Q2FzZXMpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOwpAQCAtMTAx
MTIsNyArMTAxMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCdXR0ZXJm
CiAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMSk7CiAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOwogICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAg
IHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoMiwg
c2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOworICAgICAgICBzdG9yYWdlUmVzdWx0R1BS
LCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2NyYXRjaDIsIHNj
cmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0R1BSKTsKIAogICAgIG1f
aml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlc3Vs
dEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjAz
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMzUsNyArMzIzNSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgIT0gR2V0QnV0dGVyZmx5V2l0aG91dENhZ2luZykKLSAgICAgICAgICAgIGJ1dHRlcmZseSA9
IGNhZ2VkKGJ1dHRlcmZseSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjYWdlZChHaWdhY2Fn
ZTo6SlNWYWx1ZSwgYnV0dGVyZmx5KTsKICAgICAgICAgc2V0U3RvcmFnZShidXR0ZXJmbHkpOwog
ICAgIH0KIApAQCAtMzI3Miw3ICszMjcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKLSAgICAgICAgc2V0U3RvcmFnZShjYWdlZChtX291
dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSkpOworICAg
ICAgICBzZXRTdG9yYWdlKGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIG1fb3V0LmxvYWRQdHIo
Y2VsbCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNoZWNrQXJyYXkoKQpAQCAtNTA0MCw3ICs1MDQwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGlu
dHB0cl90Pig3KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIExWYWx1
ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ5dGVT
aXplLCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yU2l6ZSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIGJ5dGVTaXplLCBz
bG93Q2FzZSk7CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwo
YWxsb2NhdG9yLCBzbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwbGF0V29y
ZHMoCkBAIC04ODY5LDcgKzg4NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubmVn
KG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSkpKTsKICAgICAgICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwgY2FnZWQoc3RvcmFnZSksIHJlYWxJbmRleCwgU2NhbGVFaWdo
dCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOworICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1f
b3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgY2FnZWQoR2ln
YWNhZ2U6OkpTVmFsdWUsIHN0b3JhZ2UpLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwpAQCAtOTA0OSw3
ICs5MDQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub0J1
dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBD
ZWxsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5
U3BhY2UsIGJ1dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBidXR0ZXJm
bHlTaXplLCBzbG93UGF0aCksCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAg
ICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCkBAIC0x
MDAwNSw3ICsxMDAwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3Ioc2l6ZUluQnl0ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5
dGVzKTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCht
X291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5h
ZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICBwYXls
b2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZt
KCkuYXV4aWxpYXJ5U3BhY2UsIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOwogICAgICAgICBMVmFsdWUgc3Rh
cnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2UpOwogICAg
ICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0
b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKQEAgLTEx
NjE0LDM0ICsxMTYxNCwzNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IExWYWx1ZSBjYWdlZChMVmFsdWUgcHRyKQorICAgIExWYWx1ZSBjYWdlZChHaWdhY2FnZTo6S2lu
ZCBraW5kLCBMVmFsdWUgcHRyKQogICAgIHsKLSAgICAgICAgaWYgKHZtKCkuZ2lnYWNhZ2VFbmFi
bGVkKCkuaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkodm0oKS5naWdhY2FnZUVuYWJsZWQoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbV9vdXQuY29uc3RJbnRQdHIoZ19naWdhY2FnZUJhc2VQ
dHIpOwotICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5jb25zdEludFB0cihHSUdBQ0FH
RV9NQVNLKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3
b3JyeSBhYm91dCBCMyBtZXNzaW5nIHVwIHRoZSBiaXRBbmQuIEFsc28sIHdlIHdhbnQgdG8gZ2V0
IEIzJ3MgZXhjZWxsZW50Ci0gICAgICAgICAgICAvLyBjb2RlZ2VuIGZvciAyLW9wZXJhbmQgYW5k
cSBvbiB4ODYtNjQuCi0gICAgICAgICAgICBMVmFsdWUgbWFza2VkID0gbV9vdXQuYml0QW5kKHB0
ciwgbWFzayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJ1dCBCMyB3aWxsIGN1cnJl
bnRseSBtZXNzIHVwIHRoZSBjb2RlIGdlbmVyYXRpb24gb2YgdGhpcyBhZGQuIEJhc2ljYWxseSwg
YW55IG9mZnNldCBmcm9tIHdoYXQgd2UKLSAgICAgICAgICAgIC8vIGNvbXB1dGUgaGVyZSB3aWxs
IGdldCByZWFzc29jaWF0ZWQgYW5kIGZvbGRlZCB3aXRoIGdfZ2lnYWNhZ2VCYXNlUHRyLiBUaGVy
ZSdzIGEgd29ybGQgaW4gd2hpY2gKLSAgICAgICAgICAgIC8vIG1vdmVDb25zdGFudHMoKSBvYnNl
cnZlcyB0aGF0IGl0IG5lZWRzIHRvIHJlYXNzb2NpYXRlIGluIG9yZGVyIHRvIGhvaXN0IHRoZSBi
aWcgY29uc3RhbnRzLiBCdXQKLSAgICAgICAgICAgIC8vIGl0J3MgbXVjaCBlYXNpZXIgdG8ganVz
dCBibG9jayBCMydzIGJhZG5lc3MgaGVyZS4gVGhhdCdzIHdoYXQgd2UgZG8gZm9yIG5vdy4KLSAg
ICAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQo
cG9pbnRlclR5cGUoKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoYmFzZVB0cik7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
bWFza2VkKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OwotICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CisgICAgICAgIGlmIChraW5kID09IEdp
Z2FjYWdlOjpQcmltaXRpdmUpIHsKKyAgICAgICAgICAgIGlmICh2bSgpLnByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkodm0oKS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBt
X291dC5jb25zdEludFB0cihHaWdhY2FnZTo6YmFzZVB0cihraW5kKSk7CisgICAgICAgIExWYWx1
ZSBtYXNrID0gbV9vdXQuY29uc3RJbnRQdHIoR0lHQUNBR0VfTUFTSyk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IEIzIG1lc3NpbmcgdXAgdGhlIGJp
dEFuZC4gQWxzbywgd2Ugd2FudCB0byBnZXQgQjMncyBleGNlbGxlbnQKKyAgICAgICAgLy8gY29k
ZWdlbiBmb3IgMi1vcGVyYW5kIGFuZHEgb24geDg2LTY0LgorICAgICAgICBMVmFsdWUgbWFza2Vk
ID0gbV9vdXQuYml0QW5kKHB0ciwgbWFzayk7CisgICAgICAgIAorICAgICAgICAvLyBCdXQgQjMg
d2lsbCBjdXJyZW50bHkgbWVzcyB1cCB0aGUgY29kZSBnZW5lcmF0aW9uIG9mIHRoaXMgYWRkLiBC
YXNpY2FsbHksIGFueSBvZmZzZXQgZnJvbSB3aGF0IHdlCisgICAgICAgIC8vIGNvbXB1dGUgaGVy
ZSB3aWxsIGdldCByZWFzc29jaWF0ZWQgYW5kIGZvbGRlZCB3aXRoIEdpZ2FjYWdlOjpiYXNlUHRy
LiBUaGVyZSdzIGEgd29ybGQgaW4gd2hpY2gKKyAgICAgICAgLy8gbW92ZUNvbnN0YW50cygpIG9i
c2VydmVzIHRoYXQgaXQgbmVlZHMgdG8gcmVhc3NvY2lhdGUgaW4gb3JkZXIgdG8gaG9pc3QgdGhl
IGJpZyBjb25zdGFudHMuIEJ1dAorICAgICAgICAvLyBpdCdzIG11Y2ggZWFzaWVyIHRvIGp1c3Qg
YmxvY2sgQjMncyBiYWRuZXNzIGhlcmUuIFRoYXQncyB3aGF0IHdlIGRvIGZvciBub3cuCisgICAg
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRl
clR5cGUoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlUHRy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKG1hc2tlZCk7CisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFtdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHJldHVybiBwYXRjaHBvaW50OwogICAg
IH0KICAgICAKICAgICB2b2lkIGJ1aWxkU3dpdGNoKFN3aXRjaERhdGEqIGRhdGEsIExUeXBlIHR5
cGUsIExWYWx1ZSBzd2l0Y2hWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTgg
KzMxLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yJiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKQotewot
ICAgIHN0YXRpYyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogcmVzdWx0OwotICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZSgKLSAg
ICAgICAgb25jZUZsYWcsCi0gICAgICAgIFtdIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwotICAgICAgICB9KTsKLSAgICByZXR1
cm4gKnJlc3VsdDsKLX0KLQogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkZhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTcgKzMxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKIHB1Ymxp
YzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3ImIGluc3RhbmNlKCk7Ci0KKyAgICBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcigpOwogICAgIH5GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwogICAgIAog
ICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgb3Zl
cnJpZGU7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
Ci0KLXByaXZhdGU6Ci0gICAgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYsMTAg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKIAotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5o
PgotCiBuYW1lc3BhY2UgSlNDIHsKIAotR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMg
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiByZXN1bHQ7Ci0gICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlRmxh
ZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdDsKLX0K
LQotR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKQorR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoR2lnYWNhZ2U6OktpbmQga2luZCkKKyAgICA6IG1fa2luZChraW5k
KQogewogfQogCkBAIC01MywxNyArMzksMTcgQEAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjp+R2lnYWNhZwogCiB2b2lkKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
LSAgICByZXR1cm4gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsK
KyAgICByZXR1cm4gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MobV9raW5kLCBhbGlnbm1lbnQs
IHNpemUpOwogfQogCiB2b2lkIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFs
aWduZWRNZW1vcnkodm9pZCogYmFzZVB0cikKIHsKLSAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUo
YmFzZVB0cik7CisgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKG1fa2luZCwgYmFzZVB0cik7CiB9
CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJHaWdhY2FnZSIpOworICAgIG91dC5wcmlu
dChHaWdhY2FnZTo6bmFtZShtX2tpbmQpLCAiR2lnYWNhZ2UiKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjIwMzQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdl
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgc2luZ2xldG9uLiBUaGVyZSBzaG91bGQgYmUgZGlm
ZmVyZW50IGluc3RhbmNlcyBmb3IgcHJpbWFyaWVzLCBKU1ZhbHVlcywKLSAgICAvLyBhbmQgb3Ro
ZXIgdGhpbmdzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQ5MTkKLSAgICBzdGF0aWMgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0
YW5jZSgpOwotCisgICAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdpZ2FjYWdlOjpL
aW5kKTsKICAgICB+R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAgCiAgICAg
dm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSBvdmVycmlkZTsKQEAgLTQ0LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpOworICAgIEdpZ2FjYWdlOjpLaW5kIG1fa2luZDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIyMDM0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzYsMTAgKzM3NiwxMCBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklU
Rm9yTG9vcCgpCiAgICAgICAgIGVuZCkKIGVuZAogCi1tYWNybyBsb2FkQ2FnZWQoc291cmNlLCBk
ZXN0LCBzY3JhdGNoKQorbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIHNvdXJjZSwgZGVzdCwgc2Ny
YXRjaCkKICAgICBsb2FkcCBzb3VyY2UsIGRlc3QKICAgICBpZiBHSUdBQ0FHRV9FTkFCTEVEIGFu
ZCBub3QgQ19MT09QCi0gICAgICAgIGxvYWRwIF9nX2dpZ2FjYWdlQmFzZVB0ciwgc2NyYXRjaAor
ICAgICAgICBsb2FkcCBiYXNlUHRyLCBzY3JhdGNoCiAgICAgICAgIGJ0cHogc2NyYXRjaCwgLmRv
bmUKICAgICAgICAgYW5kcCBjb25zdGV4cHIgR0lHQUNBR0VfTUFTSywgZGVzdAogICAgICAgICBh
ZGRwIHNjcmF0Y2gsIGRlc3QKQEAgLTEyMDksNyArMTIwOSw3IEBAIF9sbGludF9vcF9pc19vYmpl
Y3Q6CiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRB
c0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFz
SW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFs
dWUpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAg
ICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRBc0lu
dCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKQEAgLTEyMjIsNyArMTIyMiw3
IEBAIGVuZAogCiBtYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9m
ZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSwgc2NyYXRjaCkKICAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKLSAgICBs
b2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlLCBzY3JhdGNoKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNl
UHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UsIHNjcmF0Y2gpCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEg
cHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkK
QEAgLTEyOTgsNyArMTI5OCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGJ0
aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGJ0aXogdDIsIEluZGV4
aW5nU2hhcGVNYXNrLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDEpCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQw
LCB0MikKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQyKQogICAgIGxvYWRpIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIHQwCiAgICAg
YmlsdCB0MCwgMCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIs
IHQwCkBAIC0xNDgxLDcgKzE0ODEsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMy
KHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJxIHQxLCB0MQotICAgIGxvYWRDYWdl
ZChKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdDUpCisgICAgbG9hZENhZ2VkKF9nX2pz
VmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzLCB0NSkK
ICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpZXEgdDIsIEludDMyU2hhcGUs
IC5vcEdldEJ5VmFsSXNDb250aWd1b3VzCiAgICAgYmluZXEgdDIsIENvbnRpZ3VvdXNTaGFwZSwg
Lm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCkBAIC0xNTI4LDcgKzE1MjgsNyBAQCBfbGxpbnRfb3Bf
Z2V0X2J5X3ZhbDoKICAgICBiaWEgdDIsIExhc3RBcnJheVR5cGUgLSBGaXJzdEFycmF5VHlwZSwg
Lm9wR2V0QnlWYWxTbG93CiAgICAgCiAgICAgIyBTd2VldCwgbm93IHdlIGtub3cgdGhhdCB3ZSBo
YXZlIGEgdHlwZWQgYXJyYXkuIERvIHNvbWUgYmFzaWMgdGhpbmdzIG5vdy4KLSAgICBsb2FkQ2Fn
ZWQoSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3QwXSwgdDMsIHQ1KQorICAgIGxvYWRDYWdl
ZChfZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIsIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rv
clt0MF0sIHQzLCB0NSkKICAgICBiaWFlcSB0MSwgSlNBcnJheUJ1ZmZlclZpZXc6Om1fbGVuZ3Ro
W3QwXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgCiAgICAgIyBOb3cgYmlzZWN0IHRocm91Z2ggdGhl
IHZhcmlvdXMgdHlwZXMuIE5vdGUgdGhhdCB3ZSBjYW4gdHJlYXQgVWludDhBcnJheVR5cGUgYW5k
CkBAIC0xNjE5LDcgKzE2MTksNyBAQCBtYWNybyBwdXRCeVZhbChzbG93UGF0aCkKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMy
KHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQogICAgIHN4aTJxIHQzLCB0MwotICAgIGxvYWRDYWdl
ZChKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdDUpCisgICAgbG9hZENhZ2VkKF9nX2pz
VmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwLCB0NSkK
ICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpbmVxIHQyLCBJbnQzMlNoYXBl
LCAub3BQdXRCeVZhbE5vdEludDMyCiAgICAgY29udGlndW91c1B1dEJ5VmFsKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihudW1FbGVtZW50cykgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KGVsZW1lbnRCeXRlU2l6ZSk7CiAg
ICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gMTsgLy8gTWFrZSBzdXJlIG1hbGxvYyBhY3R1
YWxseSBhbGxvY2F0ZXMgc29tZXRoaW5nLCBidXQgbm90IHRvbyBtdWNoLiBXZSB1c2UgbnVsbCB0
byBtZWFuIHRoYXQgdGhlIGJ1ZmZlciBpcyBuZXV0ZXJlZC4KLSAgICBtX2RhdGEgPSBHaWdhY2Fn
ZTo6dHJ5TWFsbG9jKHNpemUpOworICAgIG1fZGF0YSA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CiAgICAgaWYgKCFtX2RhdGEpIHsKICAgICAgICAgcmVz
ZXQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgQXJyYXlCdWZm
ZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW4KICAgICAgICAgbWVtc2V0KG1fZGF0YSwgMCwgc2l6
ZSk7CiAKICAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7
Ci0gICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUocCk7IH07
CisgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgcCk7IH07CiB9CiAKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6bWFr
ZVNoYXJlZCgpCkBAIC0xODcsNyArMTg3LDcgQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKEFycgogLy8gICBmcm9tIHRoZSBjYWdlLgogUmVmPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tQnl0ZXMoZGF0YSwgYnl0ZUxlbmd0aCwgW10g
KHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUocCk7IH0pOworICAgIHJldHVybiBjcmVhdGVGcm9t
Qnl0ZXMoZGF0YSwgYnl0ZUxlbmd0aCwgW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgcCk7IH0pOwogfQogCiAvLyBGSVhNRTogV2UgY2Fubm90IHVzZSB0
aGlzIGV4Y2VwdCBpZiB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhlIGNhZ2UuCkBAIC0xOTgsOCAr
MTk4LDggQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcAogLy8gLSBX
ZWJBc3NlbWJseS4gV2FzbSBzaG91bGQgYWxsb2NhdGUgZnJvbSB0aGUgY2FnZS4KIFJlZjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBieXRlTGVuZ3RoLCBBcnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiYmIGRlc3Ry
dWN0b3IpCiB7Ci0gICAgaWYgKGRhdGEgJiYgYnl0ZUxlbmd0aCAmJiAhR2lnYWNhZ2U6OmlzQ2Fn
ZWQoZGF0YSkpCi0gICAgICAgIEdpZ2FjYWdlOjpkaXNhYmxlR2lnYWNhZ2UoKTsKKyAgICBpZiAo
ZGF0YSAmJiBieXRlTGVuZ3RoICYmICFHaWdhY2FnZTo6aXNDYWdlZChHaWdhY2FnZTo6UHJpbWl0
aXZlLCBkYXRhKSkKKyAgICAgICAgR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgp
OwogICAgIAogICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSksIGJ5dGVMZW5ndGgsIFdURk1vdmUoZGVzdHJ1Y3RvcikpOwogICAgIHJldHVybiBj
cmVhdGUoV1RGTW92ZShjb250ZW50cykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw4IEBAIGNsYXNzIFZNOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNs
YXNzIEF1eGlsaWFyeUJhcnJpZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgVCBUeXBlOworICAg
IAogICAgIEF1eGlsaWFyeUJhcnJpZXIoKTogbV92YWx1ZSgpIHsgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlND
ZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewog
ICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZv
aWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZShzaXplKTsKKyAgICB2b2lkKiBi
YXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUoc2l6ZSk7CiAg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJ
bmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoc2l6
ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRy
eUFsbG9jYXRlKHNpemUpOwogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5
Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSB2
bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKKyAgICB2b2lkKiBuZXdCYXNl
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7
CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhN
RTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2VkUHRyLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gVGhp
cyBpcyBhIGNvbnZlbmllbnQgY29tYm8gb2YgQXV4aWxpYXJ5QmFycmllciBhbmQgQ2FnZWRQdHIu
CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBhc3NlZEtpbmQsIHR5cGVuYW1lIFQ+CitjbGFz
cyBDYWdlZEJhcnJpZXJQdHIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgR2lnYWNh
Z2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CisgICAgdHlwZWRlZiBUIFR5cGU7CisgICAgCisg
ICAgQ2FnZWRCYXJyaWVyUHRyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBDYWdlZEJhcnJpZXJQdHIoVk0mIHZtLCBKU0NlbGwqIGNlbGwsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fYmFycmllci5zZXQodm0sIGNlbGwsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2JhcnJpZXIuY2xlYXIoKTsg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mIHZtLCBK
U0NlbGwqIGNlbGwsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYmFycmllci5zZXQodm0s
IGNlbGwsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBUKiBnZXQo
KSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXIuZ2V0KCkuZ2V0KCk7IH0KKyAgICBUKiBnZXRNYXlC
ZU51bGwoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXIuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7IH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRN
YXlCZU51bGwoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2Vk
QmFycmllclB0ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkQmFycmllclB0cigpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91dEJh
cnJpZXIoVSYmIHZhbHVlKSB7IG1fYmFycmllci5zZXRXaXRob3V0QmFycmllcihzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsgfQorICAgIAorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
ICpnZXQoKTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAgICBUJiBvcGVyYXRvcltd
KEluZGV4VHlwZSBpbmRleCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CisgICAgCitw
cml2YXRlOgorICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8a2luZCwgVD4+IG1fYmFycmll
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJy
aWRlVGhpbmdzKFZNJgogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVl
LCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvVmFsdWVz
RnVuY3Rpb24oKSwgRG9udEVudW0pOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZt
LmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG1hcHBlZEFyZ3VtZW50c1NpemUoKSk7CisgICAg
dm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFy
Z3VtZW50cy5raW5kKS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGlj
X2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZt
LCB0aGlzLCBvdmVycmlkZXMpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3Vt
ZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vz
c2FyeSh2bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKKyAg
ICBtX21hcHBlZEFyZ3VtZW50c1tpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCisjaW5jbHVkZSAiQ2FnZWRCYXJy
aWVyUHRyLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmgiCiAjaW5jbHVkZSAi
R2VuZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNzMsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc01h
cHBlZEFyZ3VtZW50KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaSA8
IG1fbGVuZ3RoICYmICghbV9tYXBwZWRBcmd1bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzLmdl
dCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1l
bnRzIHx8ICFtX21hcHBlZEFyZ3VtZW50c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBl
ZEFyZ3VtZW50SW5ERkcodWludDMyX3QgaSkgY29uc3QKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJf
dCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3Vt
ZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4K
ICAgICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0
aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBh
Y3R1YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0
IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCi0gICAgQXV4aWxpYXJ5QmFycmllcjxi
b29sKj4gbV9tYXBwZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxl
bmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGll
cy4KKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD4gbV9tYXBw
ZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVl
LCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWdlZEJhcnJpZXJQdHIuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYwLDcgKzYxLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgICAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJvb2wqPiBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcjsKKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2
ZSwgYm9vbD4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
aW5pdE1vZGlmaWUKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3IpOwogCiAgICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2luZ1N0
b3JlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPDg+KGFyZ3NMZW5ndGgpKTsKKyAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS50
cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5nU3RvcmUpOwogICAgICAgICBib29sKiBtb2RpZmll
ZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgICAgICBt
X21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1l
bnRzKTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnNl
dE1vZGlmaWVkCiB7CiAgICAgaW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNz
YXJ5KHZtLCBsZW5ndGgpOwogICAgIGlmIChpbmRleCA8IGxlbmd0aCkKLSAgICAgICAgbV9tb2Rp
ZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgbV9t
b2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KQEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmlzTW9kaWZpZWRBCiAgICAgaWYgKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRv
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChpbmRleCA8IGxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yW2luZGV4XTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9oZWFkKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3RhaWwpOwogICAgIAotICAgIGlmIChIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0g
dGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCkpCisgICAgaWYgKEhhc2hNYXBCdWZmZXJUeXBlKiBi
dWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXRNYXlCZU51bGwoKSkKICAgICAgICAgdmlz
aXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFz
aE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRh
ID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTMwMiw3ICszMDIsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIEhh
c2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2J1ZmZlci5nZXQoKS0+YnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci0+YnVmZmVy
KCk7CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSkKQEAgLTU5MSw3ICs1OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbWFrZUFuZFNl
dE5ld0J1ZmZlcihleGVjLCB2bSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9idWZmZXIuZ2V0
KCktPnJlc2V0KG1fY2FwYWNpdHkpOworICAgICAgICAgICAgbV9idWZmZXItPnJlc2V0KG1fY2Fw
YWNpdHkpOwogICAgICAgICAgICAgYXNzZXJ0QnVmZmVySXNFbXB0eSgpOwogICAgICAgICB9CiAK
QEAgLTY1NSw3ICs2NTUsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBC
dWNrZXRUeXBlPiBtX2hlYWQ7CiAgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBt
X3RhaWw7Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZSo+IG1fYnVmZmVy
OworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwgSGFzaE1hcEJ1ZmZlclR5
cGU+IG1fYnVmZmVyOwogICAgIHVpbnQzMl90IG1fa2V5Q291bnQ7CiAgICAgdWludDMyX3QgbV9k
ZWxldGVDb3VudDsKICAgICB1aW50MzJfdCBtX2NhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0u
YXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArOTgsNyBAQCBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJp
YXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5h
dXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90
YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRl
bXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTM2MCw3ICszNjAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0
CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAg
ICAgICAgbmV3QWxsb2NCYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6
ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVz
aXJlZENhcGFjaXR5OwpAQCAtNTUwLDcgKzU1MCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkK
QEAgLTYyMCw3ICs2MjAsNyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTcyMiw3ICs3MjIsNyBAQCB2b2lkIEpTQXJyYXk6OnB1
c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczogewpAQCAtODkwLDkg
Kzg5MCw5IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogICAg
ICAgICBhdXRvJiByZXN1bHRCdXR0ZXJmbHkgPSAqcmVzdWx0QXJyYXktPmJ1dHRlcmZseSgpOwog
ICAgICAgICBpZiAoYXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAgIG1l
bWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2Yo
SlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNv
bnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRh
KCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwg
c2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRl
cmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgcmVzdWx0
QnV0dGVyZmx5LnNldFB1YmxpY0xlbmd0aChjb3VudCk7CiAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dEFycmF5OwpAQCAtOTcwLDcgKzk3MCw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRl
eCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdp
bmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRv
IHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAgICAg
IC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNv
dW50KTsKICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkpOwogICAgICAgICBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgKz0gY291bnQ7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSRUxF
QVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAg
ICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoK
QEAgLTExOTQsNyArMTE5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUlu
ZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sg
Zm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdl
IGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVu
IHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KQEAgLTEy
MzgsNyArMTIzOCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4K
ICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldE1heUJlTnVsbCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVj
ayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQg
d2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2ggc2hpZnRpbmcgYW5kIHRo
ZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3RvcmFnZSBtb2RlLgpAQCAt
MTI4MSw3ICsxMjgxLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4
ZQogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvcjsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0
TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRN
YXlCZU51bGwoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheUNsYXNzOgpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9B
cmd1bWVudHMoRXhlY1N0YXRlKgogICAgIC8vIEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJv
bSBiZWluZyBjYWxsZWQgd2l0aCBhIFJ1bnRpbWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3
aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0
aGlzLT5sZW5ndGgoKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMx
LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0
dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxM
ZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICB2b2lk
KiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVs
bHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICBpZiAoIXRlbXAp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAg
ICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBp
ZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgc2l6ZSk7CiAgICAgICAgICAg
ICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKQEAg
LTkwLDcgKzkwLDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Ogog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGxlbmd0aCkgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KGVsZW1lbnRTaXplKTsKLSAgICBtX3Zl
Y3RvciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2Moc2l6ZSk7CisgICAgbV92ZWN0b3IgPSBHaWdhY2Fn
ZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNpemUpOwogICAgIGlmICghbV92ZWN0
b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkKQEAgLTE5Miw3
ICsxOTIsNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAg
ICBHaWdhY2FnZTo6ZnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7CisgICAgICAgIEdp
Z2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdl
dCgpKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVkSlNC
dWZmZXIoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9p
ZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICAvLyBOb3RlOiBldmVyeXRoaW5nIGJlbG93
IG11c3QgY29tZSBhZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgbV92bS0+dHJhcHMoKS5u
b3RpZnlHcmFiQWxsTG9ja3MoKTsKICAgICAKLSAgICBtX3ZtLT5maXJlR2lnYWNhZ2VFbmFibGVk
SWZOZWNlc3NhcnkoKTsKKyAgICBtX3ZtLT5maXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkSWZO
ZWNlc3NhcnkoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBpZiAoU2Ft
cGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSlNPYmplY3Q6Omhl
YXBTbmFwc2hvdChKU0NlbGwqIGNlbGwKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUHJvcGVy
dHlOYW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBlbnRyeS5rZXkpOwogICAg
IH0KIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICBpZiAoYnV0dGVyZmx5KSB7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IG51bGxwdHI7CiAgICAgICAgIHVp
bnQzMl90IGNvdW50ID0gMDsKQEAgLTYxMyw3ICs2MTMsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC04NzUsNyArODc1LDcgQEAgYm9vbCBKU09i
amVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewot
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC05NzksNyArOTc5LDcgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNbwogICAgICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIHN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpA
QCAtMTAxMSw3ICsxMDExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbElu
ZGV4ZQogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRp
bWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBsZW5ndGgpOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJp
Z2h0KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMs
IHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVy
Zmx5LmdldE1heUJlTnVsbCgpLCB2bSwgdGhpcywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5
LCBmYWxzZSwgMCwKICAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdC
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwpAQCAtMTA5OSw3ICsxMDk5
LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEluZGV4
aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRU
eXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogCi0gICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMsIG9sZFN0
cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJl
TnVsbCgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFn
ZUJ1dHRlcmZseSh2bSwgdGhpcywgb2xkU3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwg
bV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIG9s
ZFN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBudWtl
U3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5
KTsKQEAgLTExMTcsNDMgKzExMTcsNDMgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
b252ZXJ0VW5kZQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVO
dWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51
bGwoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBp
LS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91c0ludDMyKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50
MzIoKTsKIH0KIAogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0RvdWJsZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQo
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAKICAgICBzZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKIAogICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMo
KTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyhWTSYgdm0sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgdW5zaWduZWQgcHVibGlj
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVk
IHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAg
IHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpOwogICAg
IApAQCAtMTE2Miw3ICsxMTYyLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0
Q29udmVydAogICAgIAogICAgIG1lbWNweSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCiAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFn
ZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC0xMTgwLDcgKzExODAsNyBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCkBAIC0xMjAzLDcg
KzEyMDMsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiB7CiAg
ICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91
YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CkBA
IC0xMjE4LDcgKzEyMTgsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydElu
dDMyCiAgICAgfQogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsK
IH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3Vv
dXMoVk0mIHZtKQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwog
ICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250
aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC0xMjM0LDkgKzEyMzQsOSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodik7CkBAIC0xMjYxLDcgKzEyNjEsNyBAQCBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTsp
IHsKICAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRBc1ZhbHVlID0g
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGN1cnJlbnQpOwpAQCAtMTI3Niw3
ICsxMjc2LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YgogICAg
IAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlT
dG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC0xMjg0
LDkgKzEyODQsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29u
c3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVj
dG9yTGVuZ3RoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
LmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAg
ICBpZiAodmFsdWUgIT0gdmFsdWUpIHsKQEAgLTEzMTUsOSArMTMxNSw5IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlT
dG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwpAQCAtMTQwOCw4ICsxNDA4LDggQEAgdm9pZCBK
U09iamVjdDo6Y29udmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNMZW5n
dGgoKSk7Ci0gICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwor
ICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgY29u
dmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0SW5kZXhRdWlja2x5KHZt
LCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7
CkBAIC0xODYyLDcgKzE4NjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewogICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKQEAgLTIxNjgsNyArMjE2OCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmoKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewpAQCAtMjMyNSw3ICsyMzI1LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmZpbGxHZXR0ZXJQcgogYm9vbCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3Jp
cHRvcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gbWFwID0gbV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBhdXRv
IG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAK
ICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRl
c2NyaXB0b3IudmFsdWUoKSkKQEAgLTIzOTUsNyArMjM5NSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkg
JiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVk
QWNjZXNzb3JzKHZtKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwogICAgIAogICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgpAQCAtMjQyNyw3ICsy
NDI3LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgICAg
ICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwogCiAgICAgICAgIHB1dEluZGV4ZWREZXNjcmlw
dG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgaWYgKGluZGV4
ID49IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQogICAgICAgICAgICAgYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjU1OSw3ICsyNTU5LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3RvckxlbgogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwog
ICAgIAogICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVh
dGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgogICAgIC8vIG9yIGVx
dWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgpAQCAtMjU4MSw3ICsyNTgxLDcgQEAgYm9vbCBKU09i
amVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewpAQCAtMjg2OSw3ICsyODY5
LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogICAgICAgICAK
ICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmli
dXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVu
Z3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTI4ODMsNyArMjg4Myw3IEBAIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKKyAg
ICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTI5MDIsNyArMjkwMiw3IEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAg
ICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjkxMiw3ICsyOTEyLDcgQEAgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMzAxNSw4ICsz
MDE1LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGlm
IChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgaWYgKEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpKQogICAgICAgICAgICAg
aW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9i
dXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICB9CiAKICAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3Ro
KGluZGV4QmlhcywgdmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwpAQCAtMzEz
Miw3ICszMTMyLDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
CiBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAg
ICBBU1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUo
KSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKQEAgLTMxODgsMTEgKzMxODgsMTEgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0
ZUFuZFNocmlua0J1dHRlcgogewogICAgIEFTU0VSVChsZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8
IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8
IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVChtX2J1dHRlcmZseS5n
ZXQoKS0+dmVjdG9yTGVuZ3RoKCkgPiBsZW5ndGgpOwotICAgIEFTU0VSVCghbV9idXR0ZXJmbHku
Z2V0KCktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CisgICAg
QVNTRVJUKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA+IGxlbmd0aCk7CisgICAgQVNTRVJU
KCFtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKCkp
KTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBuZXdCdXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTMyMDYsNyAr
MzIwNiw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91dE9mTGkKICAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIGZvciB0aGUgcHJvcGVydHkKICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2
ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KIAotICAgIHJldHVybiBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5nZXQoKS5n
ZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUp
OworICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1
dHRlcmZseS5nZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUs
IG5ld1NpemUpOwogfQogCiBzdGF0aWMgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogZ2V0
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25Gb3JHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNl
dHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQpAQCAtMzU1Miw3
ICszNTUyLDcgQEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5Lmdl
dCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjIwMzQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsOSArMjQsOSBAQAogCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgog
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgotI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIK
ICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJDYWdl
ZEJhcnJpZXJQdHIuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKQEAgLTQzLDcgKzQzLDYgQEAK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oIgotI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNzgsMTQgKzE3NywxNCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4
aW5nVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgdW5zaWduZWQgZ2V0VmVjdG9y
TGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhp
bmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIHB1dElubGluZUZv
ckpTT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CkBAIC0yMjEsNyArMjIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
Y2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA8
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHJvcGVydHlOYW1lIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSw3ICsyNTQsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7
Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5
QmVOdWxsKCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
TWF5QmVOdWxsKCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKQEAgLTI4MSw3ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2gg
KGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpLmFzSW50MzIoKSk7CkBAIC0yOTksNyArMjk4LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsK
LSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlC
ZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRN
YXlCZU51bGwoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVE
X0lOREVYSU5HX1RZUEVTOgpAQCAtMzUzLDcgKzM1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7
CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19U
WVBFUzoKQEAgLTM3Niw3ICszNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0
SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKLSAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KTsKQEAgLTQzNiw3ICs0MzUsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGlu
aXRpYWxpemVJbmRleChPYmplY3RJbml0aWFsaXphdGlvblNjb3BlJiBzY29wZSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAg
Vk0mIHZtID0gc2NvcGUudm0oKTsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBzZXRJbmRl
eFF1aWNrbHlUb1VuZGVjaWRlZCh2bSwgaSwgdik7CkBAIC00OTMsNyArNDkyLDcgQEAgcHVibGlj
OgogICAgIC8vIGJhcnJpZXJzLiBUaGlzIGltcGxpZXMgbm90IGhhdmluZyBhbnkgZGF0YSBmb3Jt
YXQgY29udmVyc2lvbnMuCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUmLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewotICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgewogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NDIsNyArNTQx
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHkuZ2V0
KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhIW1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNTU5LDcgKzU1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9k
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5T
cGFyc2VNb2RlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjY5LDExICs2
NjgsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwog
ICAgIH0KICAgICAgICAgCi0gICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsgfQotICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7
IH0KKyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldE1heUJlTnVsbCgpOyB9CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJl
dHVybiBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsgfQogICAgIAotICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsg
fQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsgfQogCiAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25G
b3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgIHsKQEAgLTgwNyw3ICs4
MDYsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUludDMyKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKSkK
LSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7
CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwogICAg
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3codm0pOwogICAgIH0KQEAg
LTgxOSw3ICs4MTgsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91
YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKGluZGV4aW5n
VHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZt
KTsKICAgICB9CkBAIC04MjksNyArODI4LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyBlbnN1cmVDb250aWd1b3VzKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
aGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlQ29u
dGlndW91c1Nsb3codm0pOwogICAgIH0KQEAgLTg0MSw3ICs4NDAsNyBAQCBwdWJsaWM6CiAgICAg
QXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoVk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIHJldHVybiBl
bnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC04OTMsNyArODkyLDcgQEAgcHJv
dGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwg
dGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Ig
bm90IHRoZQpAQCAtOTAyLDcgKzkwMSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIDA7CkBAIC05NjgsMTMgKzk2NywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChs
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgICAgIEFTU0VSVChoYXND
b250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwg
aGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkp
KTsKIAotICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoKSB7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgp
IHsKICAgICAgICAgICAgIGlmICghZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3RoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQotICAgICAg
ICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAg
ICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAg
bV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTA0Niw3ICsxMDQ1LDcgQEAgcHJpdmF0ZToKICAgICBQ
cm9wZXJ0eU9mZnNldCBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlSUQsIFN0cnVjdHVyZSop
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxCdXR0ZXJmbHk+
PiBtX2J1dHRlcmZseTsKKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OkpTVmFsdWUsIEJ1
dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9wYWRkaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRl
VW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9i
amVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVt
cCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAg
aWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxNSArMTY1LDE5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcnVuTG9vcChDRlJ1bkxvb3BHZXRD
dXJyZW50KCkpCiAjZW5kaWYgLy8gVVNFKENGKQogICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkK
LSAgICAsIGF1eGlsaWFyeVNwYWNlKCJBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1
dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCAmR2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgY2VsbFNwYWNlKCJK
U0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkp
Ci0gICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFj
ZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIHNlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhl
YXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAs
IGZhc3RNYWxsb2NBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcj4oKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6
bWFrZV91bmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJp
bWl0aXZlKSkKKyAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVl
PEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQorICAg
ICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1
eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlv
biwgSGVhcENlbGw6OkF1eGlsaWFyeSksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2Ug
QXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERv
ZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlND
ZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2Vs
bDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNl
KCJKU1N0cmluZyIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0
cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgi
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwg
Y2xpZW50RGF0YSgwKQpAQCAtMjExLDcgKzIxNSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fY29kZUNhY2hlKHN0ZDo6bWFrZV91bmlxdWU8Q29k
ZUNhY2hlPigpKQogICAgICwgbV9idWlsdGluRXhlY3V0YWJsZXMoc3RkOjptYWtlX3VuaXF1ZTxC
dWlsdGluRXhlY3V0YWJsZXM+KCp0aGlzKSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENv
dW50KDApCi0gICAgLCBtX2dpZ2FjYWdlRW5hYmxlZChJc1dhdGNoZWQpCisgICAgLCBtX3ByaW1p
dGl2ZUdpZ2FjYWdlRW5hYmxlZChJc1dhdGNoZWQpCiAgICAgLCBtX2NvbnRyb2xGbG93UHJvZmls
ZXJFbmFibGVkQ291bnQoMCkKICAgICAsIG1fc2hhZG93Q2hpY2tlbihzdGQ6Om1ha2VfdW5pcXVl
PFNoYWRvd0NoaWNrZW4+KCkpCiB7CkBAIC0yOTAsNyArMjk0LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGluaXRpYWxpemVIb3N0Q2FsbFJldHVyblZh
bHVlKCk7IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNvbnZpbmNlIHRoZSBsaW5rZXIgbm90IHRvIGRy
b3AgaG9zdCBjYWxsIHJldHVybiBzdXBwb3J0LgogI2VuZGlmCiAgICAgCi0gICAgR2lnYWNhZ2U6
OmFkZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOworICAg
IEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKIAogICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCk7CiAgICAgCkBAIC0zNTQsNyArMzU4LDcgQEAgVk06On5WTSgpCiB7CiAgICAgYXV0byBkZXN0
cnVjdGlvbkxvY2tlciA9IGhvbGRMb2NrKHNfZGVzdHJ1Y3Rpb25Mb2NrLnJlYWQoKSk7CiAgICAg
Ci0gICAgR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkQ2Fs
bGJhY2ssIHRoaXMpOworICAgIEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKICAgICBwcm9taXNl
RGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQpAQCAtNDIzLDIxICs0
MjcsMjEgQEAgVk06On5WTSgpCiAjZW5kaWYKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VEaXNhYmxl
ZENhbGxiYWNrKHZvaWQqIGFyZ3VtZW50KQordm9pZCBWTTo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNh
YmxlZENhbGxiYWNrKHZvaWQqIGFyZ3VtZW50KQogewotICAgIHN0YXRpY19jYXN0PFZNKj4oYXJn
dW1lbnQpLT5naWdhY2FnZURpc2FibGVkKCk7CisgICAgc3RhdGljX2Nhc3Q8Vk0qPihhcmd1bWVu
dCktPnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VE
aXNhYmxlZCgpCit2b2lkIFZNOjpwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKCkKIHsKICAgICBp
ZiAobV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKSB7Ci0gICAgICAgIG1f
Z2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJHaWdhY2FnZSBkaXNhYmxlZCIpOworICAg
ICAgICBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiUHJpbWl0aXZl
IGdpZ2FjYWdlIGRpc2FibGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgCiAgICAgLy8g
VGhpcyBpcyB0b3RhbGx5IHJhY3ksIGFuZCB0aGF0J3MgT0suIFRoZSBwb2ludCBpcywgaXQncyB1
cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCB0aGV5IHBhc3MgdGhlCiAgICAgLy8gdW5jYWdl
ZCBidWZmZXIgaW4gYSBuaWNlbHkgc3luY2hyb25pemVkIG1hbm5lci4KLSAgICBtX25lZWRUb0Zp
cmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVlOworICAgIG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZCA9IHRydWU7CiB9CiAKIHZvaWQgVk06OnNldExhc3RTdGFja1RvcCh2b2lkKiBs
YXN0U3RhY2tUb3ApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRl
IDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0dpZ2FjYWdlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtOTUsNiAr
OTYsOCBAQCBjbGFzcyBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7
CiBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGNlcHRpb25TY29wZTsKK2NsYXNzIEZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBU
eXBlUHJvZmlsZXJMb2c7CkBAIC0yODUsNyArMjg4LDMwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAg
ICAgSGVhcCBoZWFwOwogICAgIAotICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gZmFzdE1hbGxv
Y0FsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yPiBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3I7
CisgICAgCisgICAgU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8g
VHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBTdWJz
cGFjZSBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5
cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCisKKyAgICAvLyBXZSBtYWtlIGNyb3NzLWN1dHRp
bmcgYXNzdW1wdGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlzIGJlaW5nIGluIHRoZSBwcmltaXRpdmUg
R2lnYWNhZ2UgYW5kIGJ1dHRlcmZsaWVzCisgICAgLy8gYmVpbmcgaW4gdGhlIEpTVmFsdWUgZ2ln
YWNhZ2UuIEZvciBzb21lIHR5cGVzLCBpdCdzIHN1cGVyIG9idmlvdXMgd2hlcmUgdGhleSBzaG91
bGQgZ28sIGFuZCBzbyB3ZQorICAgIC8vIGNhbiBoYXJkY29kZSB0aGF0IGZhY3QuIEJ1dCBzb21l
dGltZXMgaXQncyBub3QgY2xlYXIsIHNvIHdlIGFic3RyYWN0IGl0IGJ5IGhhdmluZyBhIEdpZ2Fj
YWdlOjpLaW5kCisgICAgLy8gY29uc3RhbnQgc29tZXdoZXJlLgorICAgIC8vIEZJWE1FOiBNYXli
ZSBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgZXZlcnlvbmUgYWJzdHJhY3RlZCB0aGlzPworICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNDgKKyAgICBBTFdB
WVNfSU5MSU5FIFN1YnNwYWNlJiBnaWdhY2FnZUF1eGlsaWFyeVNwYWNlKEdpZ2FjYWdlOjpLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBHaWdh
Y2FnZTo6UHJpbWl0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2U7CisgICAgICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CisgICAgICAgICAg
ICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CisgICAgfQogICAgIAogICAgIC8vIFdoZW5ldmVyIHBv
c3NpYmxlLCB1c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9mIHRoZXNl
IHN1YnNwYWNlcy4KICAgICBTdWJzcGFjZSBjZWxsU3BhY2U7CkBAIC01MjQsMTEgKzU1MCwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCogbGFzdFN0YWNrVG9wKCkgeyByZXR1cm4gbV9sYXN0U3RhY2tU
b3A7IH0KICAgICB2b2lkIHNldExhc3RTdGFja1RvcCh2b2lkKik7CiAgICAgCi0gICAgdm9pZCBm
aXJlR2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkoKQorICAgIHZvaWQgZmlyZVByaW1pdGl2ZUdp
Z2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCkKICAgICB7Ci0gICAgICAgIGlmIChtX25lZWRUb0Zp
cmVHaWdhY2FnZUVuYWJsZWQpIHsKLSAgICAgICAgICAgIG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5h
YmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgbV9naWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhp
cywgIkdpZ2FjYWdlIGRpc2FibGVkIGFzeW5jaHJvbm91c2x5Iik7CisgICAgICAgIGlmIChtX25l
ZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1fbmVlZFRv
RmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9wcmlt
aXRpdmVHaWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIlByaW1pdGl2ZSBnaWdhY2FnZSBk
aXNhYmxlZCBhc3luY2hyb25vdXNseSIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MzMsNyAr
NjU5LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQg
Z290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
ZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKICAgICAKLSAgICBJbmxpbmVXYXRjaHBv
aW50U2V0JiBnaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX2dpZ2FjYWdlRW5hYmxlZDsgfQor
ICAgIElubGluZVdhdGNocG9pbnRTZXQmIHByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0
dXJuIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOyB9CiAKICAgICBCdWlsdGluRXhlY3V0YWJs
ZXMqIGJ1aWx0aW5FeGVjdXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1dGFibGVzLmdl
dCgpOyB9CiAKQEAgLTc0MSw4ICs3NjcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQodW5zaWduZWQgZGVwdGgsIEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24mKTsKICNlbmRpZgogICAgIAotICAgIHN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJs
ZWRDYWxsYmFjayh2b2lkKik7Ci0gICAgdm9pZCBnaWdhY2FnZURpc2FibGVkKCk7CisgICAgc3Rh
dGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKKyAgICB2
b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIp
CiAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKQEAgLTc4Nyw4ICs4MTMsOCBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9nOwogICAg
IHVuc2lnbmVkIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50OwotICAgIGJvb2wgbV9uZWVkVG9G
aXJlR2lnYWNhZ2VFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1f
Z2lnYWNhZ2VFbmFibGVkOworICAgIGJvb2wgbV9uZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VF
bmFibGVkIHsgZmFsc2UgfTsKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4g
bV9jb250cm9sRmxvd1Byb2ZpbGVyOwogICAgIHVuc2lnbmVkIG1fY29udHJvbEZsb3dQcm9maWxl
ckVuYWJsZWRDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmIChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
R0NBbmRSZXRyeSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdp
Z2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygp
KTsKKyAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1
YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CiAgICAgICAgICAg
ICAKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB7CiAgICAgICAg
ICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBHaWdhY2Fn
ZTo6ZnJlZVZpcnR1YWxQYWdlcyhiYXNlUHRyLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
KyAgICAgICAgICAgIEdpZ2FjYWdlOjpmcmVlVmlydHVhbFBhZ2VzKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VQdHIsIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOwogICAgICAgICAgICAgbV9t
ZW1vcmllcy5yZW1vdmVGaXJzdChiYXNlUHRyKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTMx
Miw3ICszMTIsNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhCiAg
ICAgaWYgKCFpbml0aWFsQnl0ZXMpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGluaXRpYWwsIG1heGltdW0pKTsKICAgICAKLSAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNh
Z2U6OnRyeUFsaWduZWRNYWxsb2MoV1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOworICAg
IHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7CiAgICAgaWYgKCFzbG93
TWVtb3J5KSB7CiAgICAgICAgIG1lbW9yeU1hbmFnZXIoKS5mcmVlUGh5c2ljYWxCeXRlcyhpbml0
aWFsQnl0ZXMpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMzMSw3ICszMzEsNyBAQCBN
ZW1vcnk6On5NZW1vcnkoKQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVWaXJ0dWFs
UGFnZXMobV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6Ci0gICAgICAgICAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUo
bV9tZW1vcnkpOworICAgICAgICAgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzc4LDEzICszNzgsMTMgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291
bnQgbmV3UwogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7CiAgICAgICAgIAotICAgICAg
ICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhXVEY6OnBhZ2VT
aXplKCksIGRlc2lyZWRTaXplKTsKKyAgICAgICAgdm9pZCogbmV3TWVtb3J5ID0gR2lnYWNhZ2U6
OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgpLCBk
ZXNpcmVkU2l6ZSk7CiAgICAgICAgIGlmICghbmV3TWVtb3J5KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKICAg
ICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXplLCAwLCBk
ZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeSkKLSAgICAgICAgICAg
IEdpZ2FjYWdlOjphbGlnbmVkRnJlZShtX21lbW9yeSk7CisgICAgICAgICAgICBHaWdhY2FnZTo6
YWxpZ25lZEZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9tZW1vcnkpOwogICAgICAgICBtX21l
bW9yeSA9IG5ld01lbW9yeTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXpl
OwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzNDMp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE3LTA4LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJpbWl0aXZlIGF1eGlsaWFyaWVzIGFuZCBKU1ZhbHVlIGF1eGlsaWFyaWVzIHNob3VsZCBoYXZl
IHNlcGFyYXRlIGdpZ2FjYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0OTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtaXJyb3JzIHRoZSBjaGFuZ2VzIGZyb20gYm1hbGxvYy9H
aWdhY2FnZS5oLgorICAgICAgICAKKyAgICAgICAgQWxzbyBpdCB0ZWFjaGVzIENhZ2VkUHRyIGhv
dyB0byByZWFzb24gYWJvdXQgbXVsdGlwbGUgZ2lnYWNhZ2VzLgorCisgICAgICAgICogd3RmL0Nh
Z2VkUHRyLmg6CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpDYWdlZFB0cjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgICogd3RmL0dpZ2FjYWdl
LmNwcDoKKyAgICAgICAgKEdpZ2FjYWdlOjp0cnlNYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6
OnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlVmlydHVh
bFBhZ2VzKToKKyAgICAgICAgKEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKToKKyAgICAgICAg
KEdpZ2FjYWdlOjphbGlnbmVkRnJlZSk6CisgICAgICAgIChHaWdhY2FnZTo6ZnJlZSk6CisgICAg
ICAgICogd3RmL0dpZ2FjYWdlLmg6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2
ZUdpZ2FjYWdlKToKKyAgICAgICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2spOgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6
CisgICAgICAgIChHaWdhY2FnZTo6bmFtZSk6CisgICAgICAgIChHaWdhY2FnZTo6YmFzZVB0cik6
CisgICAgICAgIChHaWdhY2FnZTo6Y2FnZWQpOgorICAgICAgICAoR2lnYWNhZ2U6OmlzQ2FnZWQp
OgorICAgICAgICAoR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MpOgorICAgICAgICAoR2lnYWNh
Z2U6OmFsaWduZWRGcmVlKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlKToKKyAgICAgICAgKEdp
Z2FjYWdlOjpkaXNhYmxlR2lnYWNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OmFk
ZERpc2FibGVDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6cmVtb3ZlRGlz
YWJsZUNhbGxiYWNrKTogRGVsZXRlZC4KKwogMjAxNy0wOC0wNyAgQnJpYW4gQnVyZyAgPGJidXJn
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgQ0FOVkFTX1BBVEggY29tcGlsYXRpb24gZ3Vh
cmQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ2FnZWRQdHIuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dURi93dGYv
Q2FnZWRQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksMTEgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBw
YXNzZWRLaW5kLCB0eXBlbmFtZSBUPgogY2xhc3MgQ2FnZWRQdHIgewogcHVibGljOgorICAgIHN0
YXRpYyBjb25zdGV4cHIgR2lnYWNhZ2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CisgICAgCiAg
ICAgQ2FnZWRQdHIoVCogcHRyID0gbnVsbHB0cikKICAgICAgICAgOiBtX3B0cihwdHIpCiAgICAg
ewpAQCAtNDAsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQobV9w
dHIpOworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKICAgICB9
CiAgICAgCiAgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKQEAgLTY3LDYgKzY5LDkgQEAgcHVi
bGljOgogICAgIAogICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQog
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4
KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KICAgICAKIHByaXZhdGU6CiAgICAgVCog
bV9wdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9HaWdhY2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY29u
c3Qgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7CiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKLXZv
aWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qg
c2l6ZSkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RNYWxsb2Moc2l6ZSk7CiAgICAgdm9p
ZCogcmVhbFJlc3VsdDsKQEAgLTQ3LDEyICs0NywxMiBAQCB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90
IHNpemUpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVh
bFBhZ2VzKHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwg
c2l6ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0
ZWQoc2l6ZSk7CiB9CiAKLXZvaWQgZnJlZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXpl
X3Qgc2l6ZSkKK3ZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRyLCBzaXpl
X3Qgc2l6ZSkKIHsKICAgICBPU0FsbG9jYXRvcjo6cmVsZWFzZURlY29tbWl0dGVkKGJhc2VQdHIs
IHNpemUpOwogfQpAQCAtNjcsNDIgKzY3LDUxIEBAIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAvLyBh
bmQgc3RheSBzY3JhbWJsZWQgZXhjZXB0IGp1c3QgYmVmb3JlIHVzZS4KIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMzUKIAotdm9pZCogdHJ5QWxpZ25lZE1h
bGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsaWduZWRNYWxs
b2MoS2luZCBraW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICB2b2lk
KiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgYm1h
bGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjph
cGk6OnRyeU1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkp
OwogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgYWxpZ25lZEZyZWUodm9pZCogcCkKK3ZvaWQgYWxpZ25lZEZyZWUoS2luZCBraW5kLCB2b2lk
KiBwKQogewotICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2ln
YWNhZ2UpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJU
KGlzQ2FnZWQoa2luZCwgcCkpOworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpo
ZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRy
eU1hbGxvYyhzaXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeU1hbGxvYyhLaW5kIGtpbmQsIHNpemVfdCBz
aXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWFsbG9jKHNpemUs
IGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxv
Yzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdU
Rjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgZnJlZSh2
b2lkKiBwKQordm9pZCBmcmVlKEtpbmQga2luZCwgdm9pZCogcCkKIHsKLSAgICBibWFsbG9jOjph
cGk6OmZyZWUocCwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybjsKKyAgICBSRUxFQVNFX0FTU0VSVChpc0NhZ2VkKGtpbmQsIHApKTsKKyAg
ICBibWFsbG9jOjphcGk6OmZyZWUocCwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAgIFdU
Rjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCi12b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhz
aXplX3Qgc2l6ZSkKK3ZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQga2luZCwgc2l6
ZV90IHNpemUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlMYXJnZU1l
bWFsaWduVmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6OkhlYXBLaW5kOjpH
aWdhY2FnZSk7CisgICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlMYXJnZU1lbWFs
aWduVmlydHVhbChXVEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQp
KTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90KQordm9pZCBmcmVlVmly
dHVhbFBhZ2VzKEtpbmQga2luZCwgdm9pZCogYmFzZVB0ciwgc2l6ZV90KQogewotICAgIGJtYWxs
b2M6OmFwaTo6ZnJlZUxhcmdlVmlydHVhbChiYXNlUHRyLCBibWFsbG9jOjpIZWFwS2luZDo6R2ln
YWNhZ2UpOworICAgIGlmICghYmFzZVB0cikKKyAgICAgICAgcmV0dXJuOworICAgIFJFTEVBU0Vf
QVNTRVJUKGlzQ2FnZWQoa2luZCwgYmFzZVB0cikpOworICAgIGJtYWxsb2M6OmFwaTo6ZnJlZUxh
cmdlVmlydHVhbChiYXNlUHRyLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpj
b21waWxlckZlbmNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwMzQzKQor
KysgU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMzAgKzMy
LDUyIEBACiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMAogCiBleHRlcm4gIkMiIHsKLWV4dGVy
biBXVEZfRVhQT1JUREFUQSBjb25zdCB2b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK2V4dGVybiBX
VEZfRVhQT1JUREFUQSB2b2lkKiBjb25zdCBnX2dpZ2FjYWdlQmFzZVB0cjsKIH0KIAogbmFtZXNw
YWNlIEdpZ2FjYWdlIHsKIAorZW51bSBLaW5kIHsKKyAgICBQcmltaXRpdmUsCisgICAgSlNWYWx1
ZQorfTsKKwogaW5saW5lIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKSB7IH0KLWlubGluZSB2b2lkIGRp
c2FibGVHaWdhY2FnZSgpIHsgfQoraW5saW5lIHZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KCkgeyB9CiBpbmxpbmUgYm9vbCBzaG91bGRCZUVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQog
Ci1pbmxpbmUgdm9pZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikg
eyB9Ci1pbmxpbmUgdm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2
b2lkKikgeyB9CitpbmxpbmUgdm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAo
Kikodm9pZCopLCB2b2lkKikgeyB9CitpbmxpbmUgdm9pZCByZW1vdmVQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKikgeyB9CisKK0FMV0FZU19JTkxJTkUgY29u
c3QgY2hhciogbmFtZShLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBQcmltaXRpdmU6CisgICAgICAgIHJldHVybiAiUHJpbWl0aXZlIjsKKyAgICBjYXNlIEpTVmFs
dWU6CisgICAgICAgIHJldHVybiAiSlNWYWx1ZSI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCogYmFzZVB0cihLaW5kKQoreworICAgIHJldHVybiBnX2dpZ2FjYWdlQmFzZVB0cjsKK30K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiBjYWdlZChUKiBwdHIpIHsgcmV0dXJu
IHB0cjsgfQoraW5saW5lIFQqIGNhZ2VkKEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9CiAK
LWlubGluZSBib29sIGlzQ2FnZWQoY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9Citpbmxp
bmUgYm9vbCBpc0NhZ2VkKEtpbmQsIGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogCi1p
bmxpbmUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkgeyByZXR1cm4gdHJ5RmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsgfQotaW5s
aW5lIHZvaWQgYWxpZ25lZEZyZWUodm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7IH0KLVdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90IHNpemUpOwotaW5saW5lIHZv
aWQgZnJlZSh2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CitpbmxpbmUgdm9pZCogdHJ5QWxpZ25l
ZE1hbGxvYyhLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeyByZXR1cm4gdHJ5
RmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsgfQoraW5saW5lIHZvaWQgYWxpZ25l
ZEZyZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0QWxpZ25lZEZyZWUocCk7IH0KK1dURl9FWFBPUlRf
UFJJVkFURSB2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90IHNpemUpOworaW5saW5lIHZvaWQg
ZnJlZShLaW5kLCB2b2lkKiBwKSB7IGZhc3RGcmVlKHApOyB9CiAKLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhzaXplX3Qgc2l6ZSk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXpl
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5k
LCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2Vz
KEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBuYW1lc3BhY2UgR2ln
YWNhZ2UKICNlbHNlCkBAIC02MywxMyArODUsMTMgQEAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZnJlZVZpcnR1YWxQYWdlcwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCi1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGlnbmVkRnJlZSh2b2lkKik7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmcmVlKHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGlnbmVkTWFs
bG9jKEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGFsaWduZWRGcmVlKEtpbmQsIHZvaWQqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZy
ZWUoS2luZCwgdm9pZCopOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoc2l6ZV90IHNpemUpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZp
cnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNlUHRy
LCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA4LTA2ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUHJpbWl0aXZlIGF1eGlsaWFyaWVzIGFuZCBK
U1ZhbHVlIGF1eGlsaWFyaWVzIHNob3VsZCBoYXZlIHNlcGFyYXRlIGdpZ2FjYWdlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTE5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKyAgICAgICAgCisgICAgICAgIEFkYXB0aW5nIHRv
IEFQSSBjaGFuZ2VzIC0gd2Ugbm93IHNwZWNpZnkgdGhlIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
ZGlmZmVyZW50bHkgYW5kIHdlIG5lZWQgdG8gYmUKKyAgICAgICAgc3BlY2lmaWMgYWJvdXQgd2hp
Y2ggR2lnYWNhZ2Ugd2UncmUgdXNpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpKU1ZN
Q2xpZW50RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR1BVQnVmZmVy
TWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OkdQVUJ1ZmZlcik6CisKIDIw
MTctMDgtMDcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMDI5OS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjAz
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBK
U1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDogbV9idWlsdGluRnVu
Y3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQotICAgICwgbV9vdXRwdXRDb25z
dHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhl
YXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAs
IG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmpl
Y3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCBtX291dHB1dENvbnN0cmFpbnRTcGFjZSgi
V2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1h
bGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWlu
dFNwYWNlKCJXZWJDb3JlIEdsb2JhbCBPYmplY3Qgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5o
ZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogewogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJN
ZXRhbC5tbQkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1LDExICs0
NSwxMSBAQCBHUFVCdWZmZXI6OkdQVUJ1ZmZlcihHUFVEZXZpY2UqIGRldmljZSwgCiAgICAgCiAg
ICAgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOwogICAgIHNpemVfdCBwYWdlQWxp
Z25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHBhZ2VTaXplLCBkYXRhLT5ieXRlTGVuZ3Ro
KCkpOwotICAgIHZvaWQqIHBhZ2VBbGlnbmVkQ29weSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFs
bG9jKHBhZ2VTaXplLCBwYWdlQWxpZ25lZFNpemUpOworICAgIHZvaWQqIHBhZ2VBbGlnbmVkQ29w
eSA9IEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHBhZ2VT
aXplLCBwYWdlQWxpZ25lZFNpemUpOwogICAgIGlmICghcGFnZUFsaWduZWRDb3B5KQogICAgICAg
ICByZXR1cm47CiAgICAgbWVtY3B5KHBhZ2VBbGlnbmVkQ29weSwgZGF0YS0+YmFzZUFkZHJlc3Mo
KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICBtX2NvbnRlbnRzID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUZyb21CeXRlcyhwYWdlQWxpZ25lZENvcHksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgW10gKHZv
aWQqIHB0cikgeyBHaWdhY2FnZTo6YWxpZ25lZEZyZWUocHRyKTsgfSk7CisgICAgbV9jb250ZW50
cyA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMocGFnZUFsaWduZWRDb3B5LCBkYXRhLT5i
eXRlTGVuZ3RoKCksIFtdICh2b2lkKiBwdHIpIHsgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIHB0cik7IH0pOwogICAgIG1fY29udGVudHMtPnJlZigpOwogICAgIEFy
cmF5QnVmZmVyKiBjYXB0dXJlZENvbnRlbnRzID0gbV9jb250ZW50cy5nZXQoKTsKICAgICBtX2J1
ZmZlciA9IGFkb3B0TlMoKE1UTEJ1ZmZlciAqKVtkZXZpY2UtPnBsYXRmb3JtRGV2aWNlKCkgbmV3
QnVmZmVyV2l0aEJ5dGVzTm9Db3B5Om1fY29udGVudHMtPmRhdGEoKSBsZW5ndGg6cGFnZUFsaWdu
ZWRTaXplIG9wdGlvbnM6TVRMUmVzb3VyY2VPcHRpb25DUFVDYWNoZU1vZGVEZWZhdWx0IGRlYWxs
b2NhdG9yOl4odm9pZCosIE5TVUludGVnZXIpIHsgY2FwdHVyZWRDb250ZW50cy0+ZGVyZWYoKTsg
fV0pOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDgtMDYgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBQcmltaXRpdmUgYXV4aWxpYXJp
ZXMgYW5kIEpTVmFsdWUgYXV4aWxpYXJpZXMgc2hvdWxkIGhhdmUgc2VwYXJhdGUgZ2lnYWNhZ2Vz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5MTkK
KworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisgICAgICAgIAorICAgICAgICBU
aGUgZGlzYWJsZSBjYWxsYmFjayBpcyBhbGwgYWJvdXQgdGhlIHByaW1pdGl2ZSBnaWdhY2FnZS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjptX3dlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlcik6CisgICAgICAgIChXZWJLaXQ6OmdpZ2FjYWdlRGlzYWJsZWQpOiBE
ZWxldGVkLgorCiAyMDE3LTA4LTA3ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBDQU5WQVNfUEFUSCBjb21waWxhdGlvbiBndWFyZApJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjIwMzQzKQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNyArMTQ2LDcgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgbm9uVmlzaWJsZVByb2Nlc3NDbAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIHZvaWQgZ2lnYWNhZ2VEaXNhYmxlZCh2b2lk
KikKK3N0YXRpYyB2b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCiB7CiAgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CkBAIC0yMDMsNyArMjAzLDcgQEAgV2ViUHJv
Y2Vzczo6V2ViUHJvY2VzcygpCiAgICAgfSk7CiAKICAgICBpZiAoR2lnYWNhZ2U6OnNob3VsZEJl
RW5hYmxlZCgpKQotICAgICAgICBHaWdhY2FnZTo6YWRkRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdl
RGlzYWJsZWQsIG51bGxwdHIpOworICAgICAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJs
ZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQsIG51bGxwdHIpOwogfQogCiBXZWJQ
cm9jZXNzOjp+V2ViUHJvY2VzcygpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzNDMpCisr
KyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBA
QAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2
ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyB0d28ga2luZHMgb2YgR2lnYWNhZ2Us
IFByaW1pdGl2ZSBhbmQgSlNWYWx1ZS4gVGhpcyB0cmFuc2xhdGVzIHRvIHR3byBraW5kcyBvZgor
ICAgICAgICBIZWFwS2luZCwgUHJpbWl0aXZlR2lnYWNhZ2UgYW5kIEpTVmFsdWVHaWdhY2FnZS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgc3VwcG9ydCBmdW5jdGlvbmFsaXR5IHJlcXVpcmVk
IHR1cm5pbmcgSW5saW5lLmggaW50byBCSW5saW5lLmgsIGFuZCBJTkxJTkUgaW50byBCSU5MSU5F
LCBhbmQKKyAgICAgICAgTk9fSU5MSU5FIGludG8gQk5PX0lOTElORS4KKworICAgICAgICAqIGJt
YWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNs
b3dDYXNlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKToK
KyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChi
bWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKToKKyAgICAgICAgKiBibWFs
bG9jL0FzeW5jVGFzay5oOgorICAgICAgICAqIGJtYWxsb2MvQklubGluZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oLgorICAgICAgICAqIGJtYWxsb2MvQ2Fj
aGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxs
Q2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2Fj
aGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNo
ZSk6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KToKKyAgICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKiBibWFsbG9j
L0dpZ2FjYWdlLmNwcDoKKyAgICAgICAgKEdpZ2FjYWdlOjpQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2tzOjpQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzKToKKyAgICAgICAgKEdpZ2FjYWdlOjplbnN1
cmVHaWdhY2FnZSk6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdl
KToKKyAgICAgICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2spOgorICAg
ICAgICAoR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6CisgICAgICAg
IChHaWdhY2FnZTo6Q2FsbGJhY2tzOjpDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoR2ln
YWNhZ2U6OmRpc2FibGVHaWdhY2FnZSk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6YWRk
RGlzYWJsZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEdpZ2FjYWdlOjpyZW1vdmVEaXNh
YmxlQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvR2lnYWNhZ2UuaDoKKyAg
ICAgICAgKEdpZ2FjYWdlOjpuYW1lKToKKyAgICAgICAgKEdpZ2FjYWdlOjpiYXNlUHRyKToKKyAg
ICAgICAgKEdpZ2FjYWdlOjpmb3JFYWNoS2luZCk6CisgICAgICAgIChHaWdhY2FnZTo6Y2FnZWQp
OgorICAgICAgICAoR2lnYWNhZ2U6OmlzQ2FnZWQpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5j
cHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKGJtYWxsb2M6Okhl
YXA6OnVzaW5nR2lnYWNhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Z2lnYWNhZ2VCYXNl
UHRyKToKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKiBibWFsbG9jL0hlYXBL
aW5kLmg6CisgICAgICAgIChibWFsbG9jOjppc0dpZ2FjYWdlKToKKyAgICAgICAgKGJtYWxsb2M6
OmdpZ2FjYWdlS2luZCk6CisgICAgICAgIChibWFsbG9jOjpoZWFwS2luZCk6CisgICAgICAgICog
Ym1hbGxvYy9JbmxpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL01hcC5oOgorICAg
ICAgICAqIGJtYWxsb2MvUGVyUHJvY2Vzcy5oOgorICAgICAgICAoYm1hbGxvYzo6UGVyUHJvY2Vz
czxUPjo6Z2V0RmFzdENhc2UpOgorICAgICAgICAoYm1hbGxvYzo6UGVyUHJvY2VzczxUPjo6Z2V0
KToKKyAgICAgICAgKGJtYWxsb2M6OlBlclByb2Nlc3M8VD46OmdldFNsb3dDYXNlKToKKyAgICAg
ICAgKiBibWFsbG9jL1BlclRocmVhZC5oOgorICAgICAgICAoYm1hbGxvYzo6UGVyVGhyZWFkPFQ+
OjpnZXRGYXN0Q2FzZSk6CisgICAgICAgICogYm1hbGxvYy9WZWN0b3IuaDoKKyAgICAgICAgKGJt
YWxsb2M6OlZlY3RvcjxUPjo6cHVzaCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnNo
cmlua0NhcGFjaXR5KToKKyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5
KToKKwogMjAxNy0wOC0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIElmIEdpZ2FjYWdlIGlzIGRpc2FibGVkLCBibWFsbG9jIHNob3VsZCBzZXJ2aWNlIGxhcmdl
IGFsaWduZWQgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMgdGhyb3VnaCB2bUFsbG9jYXRlCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKIAkJMTRE
RDc4QzYxOEY0OEQ3NTAwOTUwNzAyIC8qIEFzeW5jVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NTIxOEJBODhBMDAwNzZGQTNGIC8qIEFz
eW5jVGFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjgg
LyogQkFzc2VydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREOURCNDUxN0YyNDQ3MTAw
RUFBQjc5IC8qIEZpeGVkVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjAxODlE
Q0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4
OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OENBMThGNDhENzUwMDk1MDcwMiAvKiBNdXRleC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RENFRDYx
N0E2NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0IxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclByb2Nl
c3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDQ2
QTA3MTdBNjFGQTQwMEY5RUExRCAvKiBQZXJQcm9jZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0MxOEY0OEQ3NTAwOTUwNzAyIC8q
IFBlclRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0NDY5RkQxN0E2MUYxRjAwRjlFQTFEIC8qIFBlclRocmVhZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NCw3ICs5NCw3IEBACiAJCTE0
MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQnVtcFJhbmdlLmg7IHBhdGggPSBibWFsbG9jL0J1bXBSYW5nZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyog
TGluZU1ldGFkYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpbmVNZXRh
ZGF0YS5oOyBwYXRoID0gYm1hbGxvYy9MaW5lTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQxMDVFODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT2JqZWN0VHlwZS5jcHA7IHBhdGgg
PSBibWFsbG9jL09iamVjdFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IElubGluZS5oOyBwYXRoID0gYm1hbGxvYy9JbmxpbmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQklubGluZS5oOyBwYXRoID0gYm1h
bGxvYy9CSW5saW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDYyMTg5
REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBCdW1wQWxsb2NhdG9yLmg7IHBhdGggPSBibWFsbG9j
L0J1bXBBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0Njgx
ODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQkFzc2VydC5oOyBwYXRoID0gYm1hbGxvYy9CQXNzZXJ0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2Mv
U3lzY2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3LDEwICsyODcsMTAg
QEAKIAkJCQk2NTk5QzVDQjFFQzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmggKi8s
CiAJCQkJMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLywKIAkJCQkwRjVC
RjE3MjFGMjNDNTcxMDAyOUQ5MUQgLyogQkV4cG9ydC5oICovLAorCQkJCTE0MTNFNDYwMTg5RENF
MUUwMDU0NkQ2OCAvKiBCSW5saW5lLmggKi8sCiAJCQkJMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQz
IC8qIEJQbGF0Zm9ybS5oICovLAogCQkJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhl
ZFZlY3Rvci5oICovLAogCQkJCTBGNUJGMTQ2MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5o
ICovLAotCQkJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLywKIAkJCQkx
NDFEOUFGRjFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5oICovLAogCQkJCTQ0MjZFMjdFMUM4MzhF
RTAwMDhFQjA0MiAvKiBMb2dnaW5nLmNwcCAqLywKIAkJCQk0NDI2RTI3RjFDODM4RUUwMDA4RUIw
NDIgLyogTG9nZ2luZy5oICovLApAQCAtMzUzLDcgKzM1Myw3IEBACiAJCQkJMTRERDc4QzgxOEY0
OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0
OTE4Rjg5QzEzMDAxMTVDOTcgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QkYxNDkx
RjIyQThEODAwMjlEOTFEIC8qIFBlckhlYXBLaW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERE
NzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNERE
NzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogQklubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0
QzA3RjUxQzdCNzAyNjAwNTFCQjZBIC8qIExhcmdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEM4OTkyRDFDQzU3ODMzMDAyN0EwNTcgLyogTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQwRkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAz
NDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgIH0K
IH0KIAotTk9fSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShC
dW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCitCTk9fSU5MSU5FIHZv
aWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1wQWxsb2NhdG9yJiBhbGxv
Y2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCiB7CiAgICAgQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5n
ZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKIApAQCAtMTU4LDcgKzE1OCw3
IEBAIE5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG8KICAgICBtX2hlYXAu
YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBS
YW5nZUNhY2hlLCBtX2RlYWxsb2NhdG9yLmxpbmVDYWNoZShsb2NrKSk7CiB9CiAKLUlOTElORSB2
b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwg
c2l6ZV90IHNpemVDbGFzcykKK0JJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRv
cihCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHNpemVfdCBzaXplQ2xhc3MpCiB7CiAgICAgQnVt
cFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNz
XTsKICAgICBpZiAoIWJ1bXBSYW5nZUNhY2hlLnNpemUoKSkKQEAgLTE2NiwxMyArMTY2LDEzIEBA
IElOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEIKICAgICByZXR1cm4gYWxs
b2NhdG9yLnJlZmlsbChidW1wUmFuZ2VDYWNoZS5wb3AoKSk7CiB9CiAKLU5PX0lOTElORSB2b2lk
KiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQq
IEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKIHsKICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7CiAgICAgcmV0dXJuIG1faGVh
cC5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2
b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplKQorQk5PX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplKQog
ewogICAgIHNpemVfdCBzaXplQ2xhc3MgPSBibWFsbG9jOjpzaXplQ2xhc3Moc2l6ZSk7CiAgICAg
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdOwpJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjZGVmaW5lIEFzeW5jVGFza19oCiAKICNpbmNsdWRlICJCQXNzZXJ0LmgiCi0j
aW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIk11dGV4
LmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlIDxhdG9taWM+CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0JJbmxpbmUuaAkocmV2aXNpb24gMjIwMzQzKQkoZnJvbSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lubGluZS5oOjIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmxpbmVfaAorI2RlZmluZSBJbmxp
bmVfaAorCisjZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5s
aW5lCisKKyNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKworI2Vu
ZGlmIC8vIElubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkocmV2aXNpb24g
MjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDExICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJ
bmxpbmVfaAotI2RlZmluZSBJbmxpbmVfaAorI2lmbmRlZiBCSW5saW5lX2gKKyNkZWZpbmUgQklu
bGluZV9oCiAKLSNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBp
bmxpbmUKKyNkZWZpbmUgQklOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5s
aW5lCiAKLSNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZp
bmUgQk5PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCiAKLSNlbmRpZiAvLyBJbmxp
bmVfaAorI2VuZGlmIC8vIEJJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJ
KHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisj
aW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIklubGluZS5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNw
YWNlIGJtYWxsb2MgewpAQCAtNDYsMjcgKzQ2LDI3IEBAIENhY2hlOjpDYWNoZShIZWFwS2luZCBo
ZWFwS2luZCkKIHsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dD
YXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUg
dm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtp
bmQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2Fj
aGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLnRyeUFsbG9jYXRl
KHNpemUpOwogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxs
Q2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBD
YWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90
IHNpemUpCiB7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRT
bG93Q2FzZSgpLT5hdChoZWFwS2luZCkuYWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAK
LU5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2lu
ZCBoZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZv
aWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3Io
KS5hbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwogfQogCi1OT19JTkxJTkUgdm9pZCBDYWNoZTo6
ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmpl
Y3QpCitCTk9fSU5MSU5FIHZvaWQgQ2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShI
ZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0KQogewogICAgIFBlclRocmVhZDxQZXJIZWFw
S2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3IoKS5k
ZWFsbG9jYXRlKG9iamVjdCk7CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0
ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVf
dCBuZXdTaXplKQorQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVs
bENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQog
ewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2Uo
KS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLnJlYWxsb2NhdGUob2JqZWN0LCBuZXdTaXplKTsK
IH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAy
MjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKi8KIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIK
KyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJEZWFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIkRlYnVnSGVhcC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNp
bmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKICNpbmNsdWRlICJQZXJQcm9j
ZXNzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdh
Y2FnZS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2ln
YWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAKIC8vIEZJWE1FOiBB
c2sgZHlsZCB0byBwdXQgdGhpcyBpbiBpdHMgb3duIHBhZ2UsIGFuZCBtcHJvdGVjdCB0aGUgcGFn
ZSBhZnRlciB3ZSBlbnN1cmUgdGhlIGdpZ2FjYWdlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NDk3Mgotdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7Cit2b2lk
KiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK3ZvaWQqIGdfanNWYWx1ZUdpZ2FjYWdlQmFz
ZVB0cjsKIAogdXNpbmcgbmFtZXNwYWNlIGJtYWxsb2M7CiAKQEAgLTUzLDggKzU0LDggQEAgc3Ry
dWN0IENhbGxiYWNrIHsKICAgICB2b2lkKiBhcmd1bWVudCB7IG51bGxwdHIgfTsKIH07CiAKLXN0
cnVjdCBDYWxsYmFja3MgewotICAgIENhbGxiYWNrcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JikgeyB9CitzdHJ1Y3QgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyB7CisgICAgUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyB9CiAg
ICAgCiAgICAgVmVjdG9yPENhbGxiYWNrPiBjYWxsYmFja3M7CiB9OwpAQCAtNjksNTIgKzcwLDU3
IEBAIHZvaWQgZW5zdXJlR2lnYWNhZ2UoKQogICAgICAgICAgICAgaWYgKCFzaG91bGRCZUVuYWJs
ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHZvaWQqIGJhc2VQdHIgPSB0cnlWTUFsbG9jYXRlKEdJR0FDQUdFX1NJWkUsIEdJR0FDQUdFX1NJ
WkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAgICAgICAgaWYgKCFiYXNlUHRyKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdm1EZWFsbG9jYXRl
UGh5c2ljYWxQYWdlcyhiYXNlUHRyLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZ19naWdhY2FnZUJhc2VQdHIgPSBiYXNlUHRyOwor
ICAgICAgICAgICAgZm9yRWFjaEtpbmQoCisgICAgICAgICAgICAgICAgWyZdIChLaW5kIGtpbmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJhbmRvbWl6ZSB3aGVyZSB0aGlzIGdv
ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzUyNDUKKyAgICAgICAgICAgICAgICAgICAgYmFzZVB0cihraW5kKSA9IHRy
eVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwgR0lHQUNBR0VfU0laRSArIEdJR0FDQUdFX1JVTldB
WSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZVB0cihraW5kKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGQVRBTDogQ291bGQgbm90IGFsbG9jYXRl
ICVzIGdpZ2FjYWdlLlxuIiwgbmFtZShraW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBC
Q1JBU0goKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlcyhiYXNlUHRyKGtpbmQp
LCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSk7CiAjZW5kaWYgLy8gR0lHQUNBR0VfRU5BQkxFRAogfQogCi12b2lkIGRpc2Fi
bGVHaWdhY2FnZSgpCit2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpCiB7CiAgICAgZW5z
dXJlR2lnYWNhZ2UoKTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CisgICAgaWYgKCFn
X3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cikgewogICAgICAgICAvLyBJdCB3YXMgbmV2ZXIgZW5h
YmxlZC4gVGhhdCBtZWFucyB0aGF0IHdlIG5ldmVyIGV2ZW4gc2F2ZWQgYW55IGNhbGxiYWNrcy4g
T3IsIHdlIGhhZCBhbHJlYWR5IGRpc2FibGVkCiAgICAgICAgIC8vIGl0IGJlZm9yZSwgYW5kIGFs
cmVhZHkgY2FsbGVkIHRoZSBjYWxsYmFja3MuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQo
KTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2Fs
bGJhY2tzPjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJh
Y2tzID0gKlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9yIChDYWxsYmFjayYgY2FsbGJhY2sg
OiBjYWxsYmFja3MuY2FsbGJhY2tzKQogICAgICAgICBjYWxsYmFjay5mdW5jdGlvbihjYWxsYmFj
ay5hcmd1bWVudCk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5zaHJpbmsoMCk7Ci0gICAgZ19n
aWdhY2FnZUJhc2VQdHIgPSBudWxscHRyOworICAgIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRy
ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9u
KSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQordm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQogewogICAgIGVuc3Vy
ZUdpZ2FjYWdlKCk7Ci0gICAgaWYgKCFnX2dpZ2FjYWdlQmFzZVB0cikgeworICAgIGlmICghZ19w
cmltaXRpdmVHaWdhY2FnZUJhc2VQdHIpIHsKICAgICAgICAgLy8gSXQgd2FzIGFscmVhZHkgZGlz
YWJsZWQgb3Igd2Ugd2VyZSBuZXZlciBhYmxlIHRvIGVuYWJsZSBpdC4KICAgICAgICAgZnVuY3Rp
b24oYXJndW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIENhbGxiYWNr
cyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6Z2V0KCk7Ci0gICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPENhbGxiYWNrcz46Om11dGV4
KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9j
ZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNr
cz46Om11dGV4KCkpOwogICAgIGNhbGxiYWNrcy5jYWxsYmFja3MucHVzaChDYWxsYmFjayhmdW5j
dGlvbiwgYXJndW1lbnQpKTsKIH0KIAotdm9pZCByZW1vdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAo
KmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQordm9pZCByZW1vdmVQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQog
ewotICAgIENhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6Z2V0
KCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPENh
bGxiYWNrcz46Om11dGV4KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxi
YWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjpnZXQoKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8UHJpbWl0aXZl
RGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2FsbGJhY2tzLmNhbGxiYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoY2FsbGJhY2tz
LmNhbGxiYWNrc1tpXS5mdW5jdGlvbiA9PSBmdW5jdGlvbgogICAgICAgICAgICAgJiYgY2FsbGJh
Y2tzLmNhbGxiYWNrc1tpXS5hcmd1bWVudCA9PSBhcmd1bWVudCkgewpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJCQXNzZXJ0LmgiCiAjaW5jbHVkZSAiQkV4cG9ydC5oIgorI2luY2x1ZGUgIkJJbmxpbmUu
aCIKICNpbmNsdWRlICJCUGxhdGZvcm0uaCIKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCkBAIC00
NCwyMyArNDUsNjAgQEAKICNkZWZpbmUgR0lHQUNBR0VfRU5BQkxFRCAwCiAjZW5kaWYKIAotZXh0
ZXJuICJDIiBCRVhQT1JUIHZvaWQqIGdfZ2lnYWNhZ2VCYXNlUHRyOworZXh0ZXJuICJDIiBCRVhQ
T1JUIHZvaWQqIGdfcHJpbWl0aXZlR2lnYWNhZ2VCYXNlUHRyOworZXh0ZXJuICJDIiBCRVhQT1JU
IHZvaWQqIGdfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0cjsKIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsK
IAorZW51bSBLaW5kIHsKKyAgICBQcmltaXRpdmUsCisgICAgSlNWYWx1ZQorfTsKKwogQkVYUE9S
VCB2b2lkIGVuc3VyZUdpZ2FjYWdlKCk7CiAKLUJFWFBPUlQgdm9pZCBkaXNhYmxlR2lnYWNhZ2Uo
KTsKK0JFWFBPUlQgdm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKTsKKworLy8gVGhpcyB3
aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhlIFByaW1pdGl2
ZSBHaWdhY2FnZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuCitCRVhQT1JUIHZvaWQgYWRkUHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOworQkVYUE9SVCB2b2lk
IHJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsK
KworQklOTElORSBjb25zdCBjaGFyKiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOwor
ICAgIGNhc2UgSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAg
QkNSQVNIKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0JJTkxJTkUgdm9pZComIGJhc2VQ
dHIoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHJpbWl0aXZl
OgorICAgICAgICByZXR1cm4gZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CisgICAgY2FzZSBK
U1ZhbHVlOgorICAgICAgICByZXR1cm4gZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOworICAgIH0K
KyAgICBCQ1JBU0goKTsKKyAgICByZXR1cm4gZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7Cit9
CiAKLS8vIFRoaXMgd2lsbCBjYWxsIHRoZSBkaXNhYmxlIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGlm
IHRoZSBHaWdhY2FnZSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuCi1CRVhQT1JUIHZvaWQgYWRkRGlz
YWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwotQkVYUE9SVCB2b2lkIHJlbW92
ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Cit2b2lkIGZvckVhY2hLaW5kKGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgZnVu
YyhQcmltaXRpdmUpOworICAgIGZ1bmMoSlNWYWx1ZSk7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1UKiBjYWdlZChUKiBwdHIpCitCSU5MSU5FIFQqIGNhZ2VkKEtpbmQga2luZCwgVCogcHRy
KQogewogICAgIEJBU1NFUlQocHRyKTsKLSAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIgPSBnX2dp
Z2FjYWdlQmFzZVB0cjsKKyAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIgPSBiYXNlUHRyKGtpbmQp
OwogICAgIGlmICghZ2lnYWNhZ2VCYXNlUHRyKQogICAgICAgICByZXR1cm4gcHRyOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFQqPigKQEAgLTY4LDkgKzEwNiw5IEBAIFQqIGNhZ2VkKFQq
IHB0cikKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICYgc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihHSUdBQ0FHRV9NQVNLKSkpOwogfQogCi1pbmxpbmUgYm9vbCBp
c0NhZ2VkKGNvbnN0IHZvaWQqIHB0cikKK0JJTkxJTkUgYm9vbCBpc0NhZ2VkKEtpbmQga2luZCwg
Y29uc3Qgdm9pZCogcHRyKQogewotICAgIHJldHVybiBjYWdlZChwdHIpID09IHB0cjsKKyAgICBy
ZXR1cm4gY2FnZWQoa2luZCwgcHRyKSA9PSBwdHI7CiB9CiAKIEJFWFBPUlQgYm9vbCBzaG91bGRC
ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjIwMzQz
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksOCArNTksOCBAQCBIZWFwOjpIZWFwKEhlYXBLaW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAg
ICAgICAgIEdpZ2FjYWdlOjplbnN1cmVHaWdhY2FnZSgpOwogI2lmIEdJR0FDQUdFX0VOQUJMRUQK
ICAgICAgICAgaWYgKHVzaW5nR2lnYWNhZ2UoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9CQVNT
RVJUKGdfZ2lnYWNhZ2VCYXNlUHRyKTsKLSAgICAgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJn
ZVJhbmdlKGdfZ2lnYWNhZ2VCYXNlUHRyLCBHSUdBQ0FHRV9TSVpFLCAwKSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0JBU1NFUlQoZ2lnYWNhZ2VCYXNlUHRyKCkpOworICAgICAgICAgICAgbV9sYXJn
ZUZyZWUuYWRkKExhcmdlUmFuZ2UoZ2lnYWNhZ2VCYXNlUHRyKCksIEdJR0FDQUdFX1NJWkUsIDAp
KTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpAQCAtNzAsNyArNzAsMTIgQEAgSGVhcDo6SGVh
cChIZWFwS2luZCBraW5kLCBzdGQ6OmxvY2tfZ3VhcgogCiBib29sIEhlYXA6OnVzaW5nR2lnYWNh
Z2UoKQogewotICAgIHJldHVybiBtX2tpbmQgPT0gSGVhcEtpbmQ6OkdpZ2FjYWdlICYmIGdfZ2ln
YWNhZ2VCYXNlUHRyOworICAgIHJldHVybiBpc0dpZ2FjYWdlKG1fa2luZCkgJiYgZ2lnYWNhZ2VC
YXNlUHRyKCk7Cit9CisKK3ZvaWQqIEhlYXA6OmdpZ2FjYWdlQmFzZVB0cigpCit7CisgICAgcmV0
dXJuIEdpZ2FjYWdlOjpiYXNlUHRyKGdpZ2FjYWdlS2luZChtX2tpbmQpKTsKIH0KIAogdm9pZCBI
ZWFwOjppbml0aWFsaXplTGluZU1ldGFkYXRhKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShy
ZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksNiArODksNyBAQCBwcml2YXRlOgogICAgIH5IZWFwKCkgPSBkZWxldGU7
CiAgICAgCiAgICAgYm9vbCB1c2luZ0dpZ2FjYWdlKCk7CisgICAgdm9pZCogZ2lnYWNhZ2VCYXNl
UHRyKCk7IC8vIE1heSBjcmFzaCBpZiAhdXNpbmdHaWdhY2FnZSgpLgogICAgIAogICAgIHZvaWQg
aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVBhZ2VNZXRhZGF0
YSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcEtpbmQuaAkocmV2aXNpb24gMjIwMzQzKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxNCArMjUsNTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCQXNzZXJ0LmgiCisj
aW5jbHVkZSAiQklubGluZS5oIgorI2luY2x1ZGUgIkdpZ2FjYWdlLmgiCisKIG5hbWVzcGFjZSBi
bWFsbG9jIHsKIAogZW51bSBjbGFzcyBIZWFwS2luZCB7CiAgICAgUHJpbWFyeSwKLSAgICBHaWdh
Y2FnZQorICAgIFByaW1pdGl2ZUdpZ2FjYWdlLAorICAgIEpTVmFsdWVHaWdhY2FnZQogfTsKIAot
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDI7CitzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG51bUhlYXBzID0gMzsKKworQklOTElORSBib29sIGlzR2lnYWNhZ2UoSGVhcEtp
bmQgaGVhcEtpbmQpCit7CisgICAgc3dpdGNoIChoZWFwS2luZCkgeworICAgIGNhc2UgSGVhcEtp
bmQ6OlByaW1hcnk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEhlYXBLaW5kOjpQ
cmltaXRpdmVHaWdhY2FnZToKKyAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0JJTkxJTkUgR2lnYWNhZ2U6OktpbmQgZ2lnYWNhZ2VLaW5kKEhlYXBLaW5kIGtp
bmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBIZWFwS2luZDo6UHJpbWFyeToK
KyAgICAgICAgQkNSQVNIKCk7CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6UHJpbWl0aXZlOwor
ICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2ZUdpZ2FjYWdlOgorICAgICAgICByZXR1cm4gR2ln
YWNhZ2U6OlByaW1pdGl2ZTsKKyAgICBjYXNlIEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U6Cisg
ICAgICAgIHJldHVybiBHaWdhY2FnZTo6SlNWYWx1ZTsKKyAgICB9CisgICAgQkNSQVNIKCk7Cisg
ICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7Cit9CisKK0JJTkxJTkUgSGVhcEtpbmQgaGVh
cEtpbmQoR2lnYWNhZ2U6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBj
YXNlIEdpZ2FjYWdlOjpQcmltaXRpdmU6CisgICAgICAgIHJldHVybiBIZWFwS2luZDo6UHJpbWl0
aXZlR2lnYWNhZ2U7CisgICAgY2FzZSBHaWdhY2FnZTo6SlNWYWx1ZToKKyAgICAgICAgcmV0dXJu
IEhlYXBLaW5kOjpKU1ZhbHVlR2lnYWNhZ2U7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJl
dHVybiBIZWFwS2luZDo6UHJpbWFyeTsKK30KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lubGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSW5saW5lLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSW5s
aW5lX2gKLSNkZWZpbmUgSW5saW5lX2gKLQotI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygo
YWx3YXlzX2lubGluZSkpIGlubGluZQotCi0jZGVmaW5lIE5PX0lOTElORSBfX2F0dHJpYnV0ZV9f
KChub2lubGluZSkpCi0KLSNlbmRpZiAvLyBJbmxpbmVfaApJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5o
CShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIE1hcF9oCiAjZGVmaW5lIE1hcF9o
CiAKLSNpbmNsdWRlICJJbmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAi
U2l6ZXMuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9QZXJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Q
ZXJQcm9jZXNzLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
UGVyUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFBl
clByb2Nlc3NfaAogI2RlZmluZSBQZXJQcm9jZXNzX2gKIAotI2luY2x1ZGUgIklubGluZS5oIgor
I2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgIlN0YXRp
Y011dGV4LmgiCiAjaW5jbHVkZSA8bXV0ZXg+CkBAIC03MSwxMyArNzEsMTMgQEAgcHJpdmF0ZToK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0
RmFzdENhc2UoKQorQklOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRGYXN0Q2FzZSgpCiB7CiAg
ICAgcmV0dXJuIHNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0KCkKK0JJ
TkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0KCkKIHsKICAgICBUKiBvYmplY3QgPSBnZXRGYXN0
Q2FzZSgpOwogICAgIGlmICghb2JqZWN0KQpAQCAtODYsNyArODYsNyBAQCBJTkxJTkUgVCogUGVy
UHJvY2VzczxUPjo6Z2V0KCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSBU
KiBQZXJQcm9jZXNzPFQ+OjpnZXRTbG93Q2FzZSgpCitCTk9fSU5MSU5FIFQqIFBlclByb2Nlc3M8
VD46OmdldFNsb3dDYXNlKCkKIHsKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxv
Y2soc19tdXRleCk7CiAgICAgaWYgKCFzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Nv
bnN1bWUpKSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclRocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgJKHJldmlzaW9uIDIy
MDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgUGVyVGhyZWFkX2gKICNkZWZpbmUgUGVyVGhy
ZWFkX2gKIAorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLSNp
bmNsdWRlICJJbmxpbmUuaCIKICNpbmNsdWRlICJQZXJIZWFwS2luZC5oIgogI2luY2x1ZGUgIlZN
QWxsb2NhdGUuaCIKICNpbmNsdWRlIDxtdXRleD4KQEAgLTExNSw3ICsxMTUsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGQ6Om9uY2VfZmxhZyBQZXJUCiAjZW5kaWYKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLUlOTElORSBUKiBQZXJUaHJlYWQ8VD46OmdldEZhc3RDYXNlKCkKK0JJTkxJTkUg
VCogUGVyVGhyZWFkPFQ+OjpnZXRGYXN0Q2FzZSgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQqPihQZXJUaHJlYWRTdG9yYWdlPFQ+OjpnZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
VmVjdG9yLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgVmVjdG9yX2gK
ICNkZWZpbmUgVmVjdG9yX2gKIAotI2luY2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxp
bmUuaCIKICNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNs
dWRlIDxjc3RyaW5nPgpAQCAtMTE5LDcgKzExOSw3IEBAIGlubGluZSBUJiBWZWN0b3I8VD46Om9w
ZXJhdG9yW10oc2l6ZV90IGkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSB2b2lk
IFZlY3RvcjxUPjo6cHVzaChjb25zdCBUJiB2YWx1ZSkKK0JJTkxJTkUgdm9pZCBWZWN0b3I8VD46
OnB1c2goY29uc3QgVCYgdmFsdWUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQog
ICAgICAgICBncm93Q2FwYWNpdHkoKTsKQEAgLTIxMiwxNCArMjEyLDE0IEBAIHZvaWQgVmVjdG9y
PFQ+OjpyZWFsbG9jYXRlQnVmZmVyKHNpemVfdCAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LU5PX0lOTElORSB2b2lkIFZlY3RvcjxUPjo6c2hyaW5rQ2FwYWNpdHkoKQorQk5PX0lOTElORSB2
b2lkIFZlY3RvcjxUPjo6c2hyaW5rQ2FwYWNpdHkoKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IG1heChpbml0aWFsQ2FwYWNpdHkoKSwgbV9jYXBhY2l0eSAvIHNocmlua0ZhY3Rvcik7CiAg
ICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1OT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCitCTk9fSU5MSU5F
IHZvaWQgVmVjdG9yPFQ+Ojpncm93Q2FwYWNpdHkoKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IG1heChpbml0aWFsQ2FwYWNpdHkoKSwgbV9zaXplICogZ3Jvd0ZhY3Rvcik7CiAgICAgcmVh
bGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317467</attachid>
            <date>2017-08-07 14:27:57 -0700</date>
            <delta_ts>2017-08-07 14:27:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139899</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBA
QAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQgSlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2
ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkxOQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgYWRhcHRzIEpTQyB0byB0aGVyZSBiZWluZyB0d28gZ2ln
YWNhZ2VzLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBtYXR0ZXJzIHNpbXBsZXIsIHRoaXMg
dHVybnMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcnMgaW50byBwZXItVk0gaW5zdGFuY2VzIHJhdGhl
ciB0aGFuCisgICAgICAgIHNpbmdsZXRvbnMuIEkgZG9uJ3QgdGhpbmsgd2Ugd2VyZSBnYWluaW5n
IGFueXRoaW5nIGJ5IG1ha2luZyB0aGVtIGJlIHNpbmdsZXRvbnMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gdGVhY2ggR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIGtpbmRzIG9mCisgICAgICAgIGdpZ2FjYWdlcy4g
V2UnbGwgaGF2ZSBvbmUgb2YgdGhvc2UgYWxsb2NhdG9ycyBwZXIgY2FnZS4KKyAgICAgICAgCisg
ICAgICAgIEZyb20gdGhlcmUsIHRoaXMgY2hhbmdlIHRlYWNoZXMgZXZlcnlvbmUgd2hvIHByZXZp
b3VzbHkga25ldyBhYm91dCBjYWdlcyB0aGF0IHRoZXJlIGFyZSB0d28gY2FnZXMuCisgICAgICAg
IFRoaXMgbWVhbnMgaGF2aW5nIHRvIHNwZWNpZnkgZWl0aGVyIEdpZ2FjYWdlOjpQcmltaXRpdmUg
b3IgR2lnYWNhZ2U6OkpTVmFsdWUuIEluIG1vc3QgcGxhY2VzLCB0aGlzIGlzCisgICAgICAgIGVh
c3k6IHR5cGVkIGFycmF5cyBhcmUgUHJpbWl0aXZlIGFuZCBidXR0ZXJmbGllcyBhcmUgSlNWYWx1
ZS4gQnV0IHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgaXQncworICAgICAgICBub3Qgc28g
b2J2aW91cywgc28gdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBzb21lIGhlbHBlcnMgdG8gbWFrZSBp
dCBlYXN5IHRvIGRlZmluZSB3aGF0IGNhZ2UgeW91IHdhbnQKKyAgICAgICAgdG8gdXNlIGluIG9u
ZSBwbGFjZSBhbmQgcmVmZXIgdG8gaXQgYWJzdHJhY3RseS4gV2UgZG8gdGhpcyBpbiBEaXJlY3RB
cmd1bWVudHMgYW5kIEdlbmVyaWNBcmd1bWVudHMuaAorICAgICAgICAKKyAgICAgICAgQSBsb3Qg
b2YgdGhlIG1hZ2ljIG9mIHRoaXMgY2hhbmdlIGlzIGR1ZSB0byBDYWdlZEJhcnJpZXJQdHIsIHdo
aWNoIGNvbWJpbmVzIEF1eGlsaWFyeUJhcnJpZXIgYW5kCisgICAgICAgIENhZ2VkUHRyLiBUaGlz
IHJlbW92ZXMgb25lIGxheWVyIG9mICJnZXQoKSIgY2FsbHMgZnJvbSBhIGJ1bmNoIG9mIHBsYWNl
cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZUJ1dHRlcmZseSk6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldERpcmVjdFBuYW1lKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjphbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjYWdlZCk6CisgICAgICAgICogaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OjppbnN0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oOgorICAgICAgICAqIGhlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeSk6CisgICAg
ICAgIChKU0M6OkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRNZW1v
cnkpOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAg
Y29uc3QpOgorICAgICAgICAoSlNDOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0dpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChwcmltaXRpdmVHaWdhY2Fn
ZURpc2FibGVkKToKKyAgICAgICAgKGpzY21haW4pOgorICAgICAgICAoZ2lnYWNhZ2VEaXNhYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlC
dWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6
Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oOgorICAgICAgICAqIHJ1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FnZWRCYXJyaWVyUHRyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQ
dHI6OkNhZ2VkQmFycmllclB0cik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6OnNldCk6CisgICAgICAgIChKU0M6
OkNhZ2VkQmFycmllclB0cjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVy
UHRyOjpnZXRNYXlCZU51bGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJh
dG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yIGJv
b2wgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6OnNldFdpdGhvdXRCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvciogY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWdlZEJhcnJpZXJQdHI6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAqIHJ1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRz
OjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6dW5tYXBB
cmd1bWVudCk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAg
KEpTQzo6RGlyZWN0QXJndW1lbnRzOjppc01hcHBlZEFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpzZXRNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOgorICAgICAgICAoSlNDOjpI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVu
dGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw6OnJlaGFzaCk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlc3RyaWN0ZWQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBvcCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpm
YXN0U2xpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXku
aDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkaWRBY3F1aXJlTG9jayk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoZWFwU25hcHNo
b3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRV
bmRlY2lkZWRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lk
ZWRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9D
b250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFy
cmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91Ymxl
VG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0Fy
cmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseVRv
VW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmRleGVkRGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJh
eUxlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1
aWNrbHkgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzU3BhcnNlTWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNlSW5kZXhpbmdN
b2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSBjb25zdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0
T2ZMaW5lU3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUludDMyKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aDoKKyAgICAgICAgKEpTQzo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJh
eSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAoSlNDOjpWTTo6cHJpbWl0aXZlR2lnYWNh
Z2VEaXNhYmxlZENhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6Vk06OnByaW1pdGl2ZUdpZ2FjYWdl
RGlzYWJsZWQpOgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlRGlzYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UpOgorICAgICAgICAoSlNDOjpWTTo6ZmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6Vk06OnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxl
ZCk6CisgICAgICAgIChKU0M6OlZNOjpmaXJlR2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VFbmFibGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6fk1lbW9yeSk6CisgICAgICAg
IChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisKIDIwMTctMDgtMDcgIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjIyMDI5OS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw5ICsz
ODAyLDkgQEAgaW50IHJ1bkpTQyhDb21tYW5kTGluZSBvcHRpb25zLCBib29sIGlzVwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJsZWQodm9pZCopCitz
dGF0aWMgdm9pZCBwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKHZvaWQqKQogewotICAgIGRhdGFM
b2coIkdpZ2FjYWdlIGRpc2FibGVkISBBYm9ydGluZy5cbiIpOworICAgIGRhdGFMb2coIlByaW1p
dGl2ZSBnaWdhY2FnZSBkaXNhYmxlZCEgQWJvcnRpbmcuXG4iKTsKICAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKIH0KIApAQCAtMzgyNyw3ICszODI3LDcgQEAgaW50IGpzY21haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSgpOwog
I2VuZGlmCiAgICAgaWYgKEdpZ2FjYWdlOjpzaG91bGRCZUVuYWJsZWQoKSkKLSAgICAgICAgR2ln
YWNhZ2U6OmFkZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkLCBudWxscHRyKTsKKyAg
ICAgICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdh
Y2FnZURpc2FibGVkLCBudWxscHRyKTsKIAogICAgIGludCByZXN1bHQ7CiAgICAgcmVzdWx0ID0g
cnVuSlNDKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDM0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsNiArODk4LDcgQEAKIAkJMEZFQzND
NTcxRjMzQTQ1MzAwRjU5QjZDIC8qIEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1NTFG
MzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDM0M1QTFG
MzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzU4MUYzM0E0
ODkwMEY1OUI2QyAvKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovOyB9Owog
CQkwRkVDM0M1QjFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
M0M1OTFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
Ki87IH07CisJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUMzQzVGMUYz
NzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovOyB9OwogCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJl
Z1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CiAJ
CTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CkBAIC0zNDk2LDYgKzM0OTcsNyBAQAogCQkw
RkVDM0M1NTFGMzNBNDUzMDBGNTlCNkMgLyogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNDNTgxRjMzQTQ4OTAwRjU5QjZDIC8q
IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVDM0M1OTFGMzNBNDg5MDBGNTlCNkMgLyogR2lnYWNhZ2VBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDM0M1RjFGMzc5RjUzMDBGNTlC
NkMgLyogQ2FnZWRCYXJyaWVyUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkQmFycmllclB0ci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQg
LyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRCNTFCREFDREFDMDA4
MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjIyLDYgKzY2MjQsNyBAQAogCQkJCTlFNzI5NDA5MTkw
RjAzMDYwMDFBOTFCNSAvKiBCdW5kbGVQYXRoLm1tICovLAogCQkJCTBGQjdGMzhCMTVFRDhFMzgw
MEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKIAkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIg
LyogQnV0dGVyZmx5SW5saW5lcy5oICovLAorCQkJCTBGRUMzQzVGMUYzNzlGNTMwMEY1OUI2QyAv
KiBDYWdlZEJhcnJpZXJQdHIuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyog
Q2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0
YS5oICovLAogCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAq
LywKQEAgLTg2MzksNiArODY0Miw3IEBACiAJCQkJMEZCMTRFMjMxODEzMDk1NTAwOUI2QjREIC8q
IERGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDRE
OTA2MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFy
cmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8q
IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg5
OEYzMjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIy
MDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7
CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0
aGlzIGNhc2Ugd291bGQgc3VjayEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDcgKzEwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0b3JhZ2VHUFIpOwogICAgIAogICAg
IGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
aml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKSkgeworICAgICAgICBp
ZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
IG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCkBAIC03ODY4LDcgKzc4NjgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6
ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAK
LSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvcihzaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihz
aXplKTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC03OTEzLDcgKzc5MTMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc2l6ZV90IG5ld1Np
emUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFTU0VSVChuZXdTaXpl
ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2pp
dC52bSgpLT5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwpAQCAtODQ5NCw3ICs4NDk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYQogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIofjcpLCBzY3JhdGNoR1BS
KTsKICAgICB9CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCgKLSAgICAgICAg
c3RvcmFnZUdQUiwgbV9qaXQudm0oKS0+YXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIsCisgICAgICAgIHN0b3JhZ2VHUFIsIG1faml0LnZtKCktPnByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsCiAgICAgICAgIHNjcmF0Y2hH
UFIyLCBzbG93Q2FzZXMpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOwpAQCAtMTAx
MTIsNyArMTAxMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCdXR0ZXJm
CiAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMSk7CiAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOwogICAgIG1faml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoCi0gICAgICAg
IHN0b3JhZ2VSZXN1bHRHUFIsIG1faml0LnZtKCktPmF1eGlsaWFyeVNwYWNlLCBzY3JhdGNoMiwg
c2NyYXRjaDEsIHNjcmF0Y2gzLCBzbG93Q2FzZXMpOworICAgICAgICBzdG9yYWdlUmVzdWx0R1BS
LCBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSwgc2NyYXRjaDIsIHNj
cmF0Y2gxLCBzY3JhdGNoMywgc2xvd0Nhc2VzKTsKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdG9yYWdlUmVzdWx0R1BSKTsKIAogICAgIG1f
aml0LnN0b3JlMzIoc2l6ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlc3Vs
dEdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjAz
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMzUsNyArMzIzNSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgIT0gR2V0QnV0dGVyZmx5V2l0aG91dENhZ2luZykKLSAgICAgICAgICAgIGJ1dHRlcmZseSA9
IGNhZ2VkKGJ1dHRlcmZseSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjYWdlZChHaWdhY2Fn
ZTo6SlNWYWx1ZSwgYnV0dGVyZmx5KTsKICAgICAgICAgc2V0U3RvcmFnZShidXR0ZXJmbHkpOwog
ICAgIH0KIApAQCAtMzI3Miw3ICszMjcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc1R5cGVkVmlldyhtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKLSAgICAgICAgc2V0U3RvcmFnZShjYWdlZChtX291
dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSkpOworICAg
ICAgICBzZXRTdG9yYWdlKGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIG1fb3V0LmxvYWRQdHIo
Y2VsbCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNoZWNrQXJyYXkoKQpAQCAtNTA0MCw3ICs1MDQwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGlu
dHB0cl90Pig3KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgICAgIExWYWx1
ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5U3BhY2UsIGJ5dGVT
aXplLCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yU2l6ZSh2bSgpLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UsIGJ5dGVTaXplLCBz
bG93Q2FzZSk7CiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwo
YWxsb2NhdG9yLCBzbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwbGF0V29y
ZHMoCkBAIC04ODY5LDcgKzg4NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQubmVn
KG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSkpKTsKICAgICAgICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwgY2FnZWQoc3RvcmFnZSksIHJlYWxJbmRleCwgU2NhbGVFaWdo
dCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOworICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1f
b3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgY2FnZWQoR2ln
YWNhZ2U6OkpTVmFsdWUsIHN0b3JhZ2UpLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwpAQCAtOTA0OSw3
ICs5MDQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub0J1
dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBD
ZWxsKAotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JGb3JTaXplKHZtKCkuYXV4aWxpYXJ5
U3BhY2UsIGJ1dHRlcmZseVNpemUsIHNsb3dQYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdG9yRm9yU2l6ZSh2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLCBidXR0ZXJm
bHlTaXplLCBzbG93UGF0aCksCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKIAogICAg
ICAgICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCkBAIC0x
MDAwNSw3ICsxMDAwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3Ioc2l6ZUluQnl0ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5
dGVzKTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbCht
X291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5h
ZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExMjMzLDcgKzExMjMzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5hZGQoCiAgICAgICAgICAgICBwYXls
b2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKHZt
KCkuYXV4aWxpYXJ5U3BhY2UsIGJ1dHRlcmZseVNpemUsIGZhaWxDYXNlKTsKKyAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUodm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSwgYnV0dGVyZmx5U2l6ZSwgZmFpbENhc2UpOwogICAgICAgICBMVmFsdWUgc3Rh
cnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKGFsbG9jYXRvciwgZmFpbENhc2UpOwogICAg
ICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5hZGQoc3RhcnRPZlN0
b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKQEAgLTEx
NjE0LDM0ICsxMTYxNCwzNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IExWYWx1ZSBjYWdlZChMVmFsdWUgcHRyKQorICAgIExWYWx1ZSBjYWdlZChHaWdhY2FnZTo6S2lu
ZCBraW5kLCBMVmFsdWUgcHRyKQogICAgIHsKLSAgICAgICAgaWYgKHZtKCkuZ2lnYWNhZ2VFbmFi
bGVkKCkuaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkodm0oKS5naWdhY2FnZUVuYWJsZWQoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbV9vdXQuY29uc3RJbnRQdHIoZ19naWdhY2FnZUJhc2VQ
dHIpOwotICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5jb25zdEludFB0cihHSUdBQ0FH
RV9NQVNLKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3
b3JyeSBhYm91dCBCMyBtZXNzaW5nIHVwIHRoZSBiaXRBbmQuIEFsc28sIHdlIHdhbnQgdG8gZ2V0
IEIzJ3MgZXhjZWxsZW50Ci0gICAgICAgICAgICAvLyBjb2RlZ2VuIGZvciAyLW9wZXJhbmQgYW5k
cSBvbiB4ODYtNjQuCi0gICAgICAgICAgICBMVmFsdWUgbWFza2VkID0gbV9vdXQuYml0QW5kKHB0
ciwgbWFzayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJ1dCBCMyB3aWxsIGN1cnJl
bnRseSBtZXNzIHVwIHRoZSBjb2RlIGdlbmVyYXRpb24gb2YgdGhpcyBhZGQuIEJhc2ljYWxseSwg
YW55IG9mZnNldCBmcm9tIHdoYXQgd2UKLSAgICAgICAgICAgIC8vIGNvbXB1dGUgaGVyZSB3aWxs
IGdldCByZWFzc29jaWF0ZWQgYW5kIGZvbGRlZCB3aXRoIGdfZ2lnYWNhZ2VCYXNlUHRyLiBUaGVy
ZSdzIGEgd29ybGQgaW4gd2hpY2gKLSAgICAgICAgICAgIC8vIG1vdmVDb25zdGFudHMoKSBvYnNl
cnZlcyB0aGF0IGl0IG5lZWRzIHRvIHJlYXNzb2NpYXRlIGluIG9yZGVyIHRvIGhvaXN0IHRoZSBi
aWcgY29uc3RhbnRzLiBCdXQKLSAgICAgICAgICAgIC8vIGl0J3MgbXVjaCBlYXNpZXIgdG8ganVz
dCBibG9jayBCMydzIGJhZG5lc3MgaGVyZS4gVGhhdCdzIHdoYXQgd2UgZG8gZm9yIG5vdy4KLSAg
ICAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQo
cG9pbnRlclR5cGUoKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoYmFzZVB0cik7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
bWFza2VkKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIocGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OwotICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CisgICAgICAgIGlmIChraW5kID09IEdp
Z2FjYWdlOjpQcmltaXRpdmUpIHsKKyAgICAgICAgICAgIGlmICh2bSgpLnByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkodm0oKS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBt
X291dC5jb25zdEludFB0cihHaWdhY2FnZTo6YmFzZVB0cihraW5kKSk7CisgICAgICAgIExWYWx1
ZSBtYXNrID0gbV9vdXQuY29uc3RJbnRQdHIoR0lHQUNBR0VfTUFTSyk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IEIzIG1lc3NpbmcgdXAgdGhlIGJp
dEFuZC4gQWxzbywgd2Ugd2FudCB0byBnZXQgQjMncyBleGNlbGxlbnQKKyAgICAgICAgLy8gY29k
ZWdlbiBmb3IgMi1vcGVyYW5kIGFuZHEgb24geDg2LTY0LgorICAgICAgICBMVmFsdWUgbWFza2Vk
ID0gbV9vdXQuYml0QW5kKHB0ciwgbWFzayk7CisgICAgICAgIAorICAgICAgICAvLyBCdXQgQjMg
d2lsbCBjdXJyZW50bHkgbWVzcyB1cCB0aGUgY29kZSBnZW5lcmF0aW9uIG9mIHRoaXMgYWRkLiBC
YXNpY2FsbHksIGFueSBvZmZzZXQgZnJvbSB3aGF0IHdlCisgICAgICAgIC8vIGNvbXB1dGUgaGVy
ZSB3aWxsIGdldCByZWFzc29jaWF0ZWQgYW5kIGZvbGRlZCB3aXRoIEdpZ2FjYWdlOjpiYXNlUHRy
LiBUaGVyZSdzIGEgd29ybGQgaW4gd2hpY2gKKyAgICAgICAgLy8gbW92ZUNvbnN0YW50cygpIG9i
c2VydmVzIHRoYXQgaXQgbmVlZHMgdG8gcmVhc3NvY2lhdGUgaW4gb3JkZXIgdG8gaG9pc3QgdGhl
IGJpZyBjb25zdGFudHMuIEJ1dAorICAgICAgICAvLyBpdCdzIG11Y2ggZWFzaWVyIHRvIGp1c3Qg
YmxvY2sgQjMncyBiYWRuZXNzIGhlcmUuIFRoYXQncyB3aGF0IHdlIGRvIGZvciBub3cuCisgICAg
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRl
clR5cGUoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlUHRy
KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKG1hc2tlZCk7CisgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFtdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHJldHVybiBwYXRjaHBvaW50OwogICAg
IH0KICAgICAKICAgICB2b2lkIGJ1aWxkU3dpdGNoKFN3aXRjaERhdGEqIGRhdGEsIExUeXBlIHR5
cGUsIExWYWx1ZSBzd2l0Y2hWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTgg
KzMxLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yJiBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKQotewot
ICAgIHN0YXRpYyBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogcmVzdWx0OwotICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZSgKLSAg
ICAgICAgb25jZUZsYWcsCi0gICAgICAgIFtdIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBG
YXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwotICAgICAgICB9KTsKLSAgICByZXR1
cm4gKnJlc3VsdDsKLX0KLQogRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkZhc3RN
YWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0Zhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTcgKzMxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBGYXN0TWFsbG9jQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKIHB1Ymxp
YzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3ImIGluc3RhbmNlKCk7Ci0KKyAgICBGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcigpOwogICAgIH5GYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwogICAgIAog
ICAgIHZvaWQqIHRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3Qgc2l6ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgb3Zl
cnJpZGU7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
Ci0KLXByaXZhdGU6Ci0gICAgRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYsMTAg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKIAotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5o
PgotCiBuYW1lc3BhY2UgSlNDIHsKIAotR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBH
aWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMg
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiByZXN1bHQ7Ci0gICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlRmxh
ZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpOwotICAgICAgICB9KTsKLSAgICByZXR1cm4gKnJlc3VsdDsKLX0K
LQotR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKQorR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpHaWdhY2FnZUFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoR2lnYWNhZ2U6OktpbmQga2luZCkKKyAgICA6IG1fa2luZChraW5k
KQogewogfQogCkBAIC01MywxNyArMzksMTcgQEAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjp+R2lnYWNhZwogCiB2b2lkKiBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsK
LSAgICByZXR1cm4gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoYWxpZ25tZW50LCBzaXplKTsK
KyAgICByZXR1cm4gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MobV9raW5kLCBhbGlnbm1lbnQs
IHNpemUpOwogfQogCiB2b2lkIEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFs
aWduZWRNZW1vcnkodm9pZCogYmFzZVB0cikKIHsKLSAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUo
YmFzZVB0cik7CisgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKG1fa2luZCwgYmFzZVB0cik7CiB9
CiAKIHZvaWQgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJHaWdhY2FnZSIpOworICAgIG91dC5wcmlu
dChHaWdhY2FnZTo6bmFtZShtX2tpbmQpLCAiR2lnYWNhZ2UiKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjIwMzQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdl
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgc2luZ2xldG9uLiBUaGVyZSBzaG91bGQgYmUgZGlm
ZmVyZW50IGluc3RhbmNlcyBmb3IgcHJpbWFyaWVzLCBKU1ZhbHVlcywKLSAgICAvLyBhbmQgb3Ro
ZXIgdGhpbmdzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQ5MTkKLSAgICBzdGF0aWMgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yJiBpbnN0
YW5jZSgpOwotCisgICAgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKEdpZ2FjYWdlOjpL
aW5kKTsKICAgICB+R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CiAgICAgCiAgICAg
dm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKSBvdmVycmlkZTsKQEAgLTQ0LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpOworICAgIEdpZ2FjYWdlOjpLaW5kIG1fa2luZDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIyMDM0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzYsMTAgKzM3NiwxMCBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklU
Rm9yTG9vcCgpCiAgICAgICAgIGVuZCkKIGVuZAogCi1tYWNybyBsb2FkQ2FnZWQoc291cmNlLCBk
ZXN0LCBzY3JhdGNoKQorbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIHNvdXJjZSwgZGVzdCwgc2Ny
YXRjaCkKICAgICBsb2FkcCBzb3VyY2UsIGRlc3QKICAgICBpZiBHSUdBQ0FHRV9FTkFCTEVEIGFu
ZCBub3QgQ19MT09QCi0gICAgICAgIGxvYWRwIF9nX2dpZ2FjYWdlQmFzZVB0ciwgc2NyYXRjaAor
ICAgICAgICBsb2FkcCBiYXNlUHRyLCBzY3JhdGNoCiAgICAgICAgIGJ0cHogc2NyYXRjaCwgLmRv
bmUKICAgICAgICAgYW5kcCBjb25zdGV4cHIgR0lHQUNBR0VfTUFTSywgZGVzdAogICAgICAgICBh
ZGRwIHNjcmF0Y2gsIGRlc3QKQEAgLTEyMDksNyArMTIwOSw3IEBAIF9sbGludF9vcF9pc19vYmpl
Y3Q6CiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRB
c0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFz
SW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCi0gICAgbG9hZENhZ2VkKEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFs
dWUpCisgICAgbG9hZENhZ2VkKF9nX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAg
ICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRBc0lu
dCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKQEAgLTEyMjIsNyArMTIyMiw3
IEBAIGVuZAogCiBtYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9m
ZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSwgc2NyYXRjaCkKICAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKLSAgICBs
b2FkQ2FnZWQoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlLCBzY3JhdGNoKQorICAgIGxvYWRDYWdlZChfZ19qc1ZhbHVlR2lnYWNhZ2VCYXNl
UHRyLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UsIHNjcmF0Y2gpCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEg
cHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkK
QEAgLTEyOTgsNyArMTI5OCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGJ0
aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGJ0aXogdDIsIEluZGV4
aW5nU2hhcGVNYXNrLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDEpCi0gICAgbG9hZENhZ2VkKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQw
LCB0MikKKyAgICBsb2FkQ2FnZWQoX2dfanNWYWx1ZUdpZ2FjYWdlQmFzZVB0ciwgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQyKQogICAgIGxvYWRpIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIHQwCiAgICAg
YmlsdCB0MCwgMCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIs
IHQwCkBAIC0xNDgxLDcgKzE0ODEsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMy
KHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJxIHQxLCB0MQotICAgIGxvYWRDYWdl
ZChKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdDUpCisgICAgbG9hZENhZ2VkKF9nX2pz
VmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzLCB0NSkK
ICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpZXEgdDIsIEludDMyU2hhcGUs
IC5vcEdldEJ5VmFsSXNDb250aWd1b3VzCiAgICAgYmluZXEgdDIsIENvbnRpZ3VvdXNTaGFwZSwg
Lm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCkBAIC0xNTI4LDcgKzE1MjgsNyBAQCBfbGxpbnRfb3Bf
Z2V0X2J5X3ZhbDoKICAgICBiaWEgdDIsIExhc3RBcnJheVR5cGUgLSBGaXJzdEFycmF5VHlwZSwg
Lm9wR2V0QnlWYWxTbG93CiAgICAgCiAgICAgIyBTd2VldCwgbm93IHdlIGtub3cgdGhhdCB3ZSBo
YXZlIGEgdHlwZWQgYXJyYXkuIERvIHNvbWUgYmFzaWMgdGhpbmdzIG5vdy4KLSAgICBsb2FkQ2Fn
ZWQoSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3QwXSwgdDMsIHQ1KQorICAgIGxvYWRDYWdl
ZChfZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIsIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rv
clt0MF0sIHQzLCB0NSkKICAgICBiaWFlcSB0MSwgSlNBcnJheUJ1ZmZlclZpZXc6Om1fbGVuZ3Ro
W3QwXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgCiAgICAgIyBOb3cgYmlzZWN0IHRocm91Z2ggdGhl
IHZhcmlvdXMgdHlwZXMuIE5vdGUgdGhhdCB3ZSBjYW4gdHJlYXQgVWludDhBcnJheVR5cGUgYW5k
CkBAIC0xNjE5LDcgKzE2MTksNyBAQCBtYWNybyBwdXRCeVZhbChzbG93UGF0aCkKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMy
KHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQogICAgIHN4aTJxIHQzLCB0MwotICAgIGxvYWRDYWdl
ZChKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdDUpCisgICAgbG9hZENhZ2VkKF9nX2pz
VmFsdWVHaWdhY2FnZUJhc2VQdHIsIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwLCB0NSkK
ICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpbmVxIHQyLCBJbnQzMlNoYXBl
LCAub3BQdXRCeVZhbE5vdEludDMyCiAgICAgY29udGlndW91c1B1dEJ5VmFsKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MjIwMzQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihudW1FbGVtZW50cykgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KGVsZW1lbnRCeXRlU2l6ZSk7CiAg
ICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gMTsgLy8gTWFrZSBzdXJlIG1hbGxvYyBhY3R1
YWxseSBhbGxvY2F0ZXMgc29tZXRoaW5nLCBidXQgbm90IHRvbyBtdWNoLiBXZSB1c2UgbnVsbCB0
byBtZWFuIHRoYXQgdGhlIGJ1ZmZlciBpcyBuZXV0ZXJlZC4KLSAgICBtX2RhdGEgPSBHaWdhY2Fn
ZTo6dHJ5TWFsbG9jKHNpemUpOworICAgIG1fZGF0YSA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CiAgICAgaWYgKCFtX2RhdGEpIHsKICAgICAgICAgcmVz
ZXQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgQXJyYXlCdWZm
ZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW4KICAgICAgICAgbWVtc2V0KG1fZGF0YSwgMCwgc2l6
ZSk7CiAKICAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7
Ci0gICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUocCk7IH07
CisgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgcCk7IH07CiB9CiAKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6bWFr
ZVNoYXJlZCgpCkBAIC0xODcsNyArMTg3LDcgQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKEFycgogLy8gICBmcm9tIHRoZSBjYWdlLgogUmVmPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQogewotICAgIHJldHVybiBjcmVhdGVGcm9tQnl0ZXMoZGF0YSwgYnl0ZUxlbmd0aCwgW10g
KHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUocCk7IH0pOworICAgIHJldHVybiBjcmVhdGVGcm9t
Qnl0ZXMoZGF0YSwgYnl0ZUxlbmd0aCwgW10gKHZvaWQqIHApIHsgR2lnYWNhZ2U6OmZyZWUoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgcCk7IH0pOwogfQogCiAvLyBGSVhNRTogV2UgY2Fubm90IHVzZSB0
aGlzIGV4Y2VwdCBpZiB0aGUgbWVtb3J5IGNvbWVzIGZyb20gdGhlIGNhZ2UuCkBAIC0xOTgsOCAr
MTk4LDggQEAgUmVmPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcAogLy8gLSBX
ZWJBc3NlbWJseS4gV2FzbSBzaG91bGQgYWxsb2NhdGUgZnJvbSB0aGUgY2FnZS4KIFJlZjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBieXRlTGVuZ3RoLCBBcnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiYmIGRlc3Ry
dWN0b3IpCiB7Ci0gICAgaWYgKGRhdGEgJiYgYnl0ZUxlbmd0aCAmJiAhR2lnYWNhZ2U6OmlzQ2Fn
ZWQoZGF0YSkpCi0gICAgICAgIEdpZ2FjYWdlOjpkaXNhYmxlR2lnYWNhZ2UoKTsKKyAgICBpZiAo
ZGF0YSAmJiBieXRlTGVuZ3RoICYmICFHaWdhY2FnZTo6aXNDYWdlZChHaWdhY2FnZTo6UHJpbWl0
aXZlLCBkYXRhKSkKKyAgICAgICAgR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgp
OwogICAgIAogICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSksIGJ5dGVMZW5ndGgsIFdURk1vdmUoZGVzdHJ1Y3RvcikpOwogICAgIHJldHVybiBj
cmVhdGUoV1RGTW92ZShjb250ZW50cykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0F1eGlsaWFyeUJhcnJpZXIuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXV4aWxpYXJ5QmFycmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw4IEBAIGNsYXNzIFZNOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNs
YXNzIEF1eGlsaWFyeUJhcnJpZXIgewogcHVibGljOgorICAgIHR5cGVkZWYgVCBUeXBlOworICAg
IAogICAgIEF1eGlsaWFyeUJhcnJpZXIoKTogbV92YWx1ZSgpIHsgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlND
ZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewog
ICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZv
aWQqIGJhc2UgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZShzaXplKTsKKyAgICB2b2lkKiBi
YXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUoc2l6ZSk7CiAg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJ
bmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoc2l6
ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRy
eUFsbG9jYXRlKHNpemUpOwogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5
Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1
ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSB2
bS5hdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsKKyAgICB2b2lkKiBuZXdCYXNl
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7
CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhN
RTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWdlZEJhcnJpZXJQdHIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0NhZ2VkUHRyLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworLy8gVGhp
cyBpcyBhIGNvbnZlbmllbnQgY29tYm8gb2YgQXV4aWxpYXJ5QmFycmllciBhbmQgQ2FnZWRQdHIu
CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBhc3NlZEtpbmQsIHR5cGVuYW1lIFQ+CitjbGFz
cyBDYWdlZEJhcnJpZXJQdHIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgR2lnYWNh
Z2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CisgICAgdHlwZWRlZiBUIFR5cGU7CisgICAgCisg
ICAgQ2FnZWRCYXJyaWVyUHRyKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBDYWdlZEJhcnJpZXJQdHIoVk0mIHZtLCBKU0NlbGwqIGNlbGwsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fYmFycmllci5zZXQodm0sIGNlbGwsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2JhcnJpZXIuY2xlYXIoKTsg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBzZXQoVk0mIHZtLCBK
U0NlbGwqIGNlbGwsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYmFycmllci5zZXQodm0s
IGNlbGwsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBUKiBnZXQo
KSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXIuZ2V0KCkuZ2V0KCk7IH0KKyAgICBUKiBnZXRNYXlC
ZU51bGwoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXIuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7IH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRN
YXlCZU51bGwoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2Vk
QmFycmllclB0ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkQmFycmllclB0cigpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHZvaWQgc2V0V2l0aG91dEJh
cnJpZXIoVSYmIHZhbHVlKSB7IG1fYmFycmllci5zZXRXaXRob3V0QmFycmllcihzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsgfQorICAgIAorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
ICpnZXQoKTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAgICBUJiBvcGVyYXRvcltd
KEluZGV4VHlwZSBpbmRleCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CisgICAgCitw
cml2YXRlOgorICAgIEF1eGlsaWFyeUJhcnJpZXI8Q2FnZWRQdHI8a2luZCwgVD4+IG1fYmFycmll
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJy
aWRlVGhpbmdzKFZNJgogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVl
LCBtX2NhbGxlZS5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvVmFsdWVz
RnVuY3Rpb24oKSwgRG9udEVudW0pOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZt
LmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG1hcHBlZEFyZ3VtZW50c1NpemUoKSk7CisgICAg
dm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFy
Z3VtZW50cy5raW5kKS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGlj
X2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZt
LCB0aGlzLCBvdmVycmlkZXMpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3Vt
ZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vz
c2FyeSh2bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKKyAg
ICBtX21hcHBlZEFyZ3VtZW50c1tpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCisjaW5jbHVkZSAiQ2FnZWRCYXJy
aWVyUHRyLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmgiCiAjaW5jbHVkZSAi
R2VuZXJpY0FyZ3VtZW50cy5oIgorI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNzMsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc01h
cHBlZEFyZ3VtZW50KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaSA8
IG1fbGVuZ3RoICYmICghbV9tYXBwZWRBcmd1bWVudHMgfHwgIW1fbWFwcGVkQXJndW1lbnRzLmdl
dCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1l
bnRzIHx8ICFtX21hcHBlZEFyZ3VtZW50c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBl
ZEFyZ3VtZW50SW5ERkcodWludDMyX3QgaSkgY29uc3QKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2
YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJf
dCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3Vt
ZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4K
ICAgICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0
aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBh
Y3R1YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0
IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCi0gICAgQXV4aWxpYXJ5QmFycmllcjxi
b29sKj4gbV9tYXBwZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxl
bmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGll
cy4KKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD4gbV9tYXBw
ZWRBcmd1bWVudHM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVl
LCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYWdlZEJhcnJpZXJQdHIuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYwLDcgKzYxLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgICAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPGJvb2wqPiBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvcjsKKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2
ZSwgYm9vbD4gbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6
aW5pdE1vZGlmaWUKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3IpOwogCiAgICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2luZ1N0
b3JlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPDg+KGFyZ3NMZW5ndGgpKTsKKyAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS50
cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5nU3RvcmUpOwogICAgICAgICBib29sKiBtb2RpZmll
ZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgICAgICBt
X21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1l
bnRzKTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnNl
dE1vZGlmaWVkCiB7CiAgICAgaW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcklmTmVjZXNz
YXJ5KHZtLCBsZW5ndGgpOwogICAgIGlmIChpbmRleCA8IGxlbmd0aCkKLSAgICAgICAgbV9tb2Rp
ZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KClbaW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgbV9t
b2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3JbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KQEAgLTI5MSw3ICsyOTEsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmlzTW9kaWZpZWRBCiAgICAgaWYgKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRv
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChpbmRleCA8IGxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmdldCgpW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yW2luZGV4XTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IYXNoTWFwSW1wbC5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQCB2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9oZWFkKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3RhaWwpOwogICAgIAotICAgIGlmIChIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0g
dGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCkpCisgICAgaWYgKEhhc2hNYXBCdWZmZXJUeXBlKiBi
dWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXRNYXlCZU51bGwoKSkKICAgICAgICAgdmlz
aXRvci5tYXJrQXV4aWxpYXJ5KGJ1ZmZlcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFz
aE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRh
ID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUoYWxsb2NhdGlvblNpemUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTMwMiw3ICszMDIsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIEhh
c2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2J1ZmZlci5nZXQoKS0+YnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci0+YnVmZmVy
KCk7CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSkKQEAgLTU5MSw3ICs1OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbWFrZUFuZFNl
dE5ld0J1ZmZlcihleGVjLCB2bSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9idWZmZXIuZ2V0
KCktPnJlc2V0KG1fY2FwYWNpdHkpOworICAgICAgICAgICAgbV9idWZmZXItPnJlc2V0KG1fY2Fw
YWNpdHkpOwogICAgICAgICAgICAgYXNzZXJ0QnVmZmVySXNFbXB0eSgpOwogICAgICAgICB9CiAK
QEAgLTY1NSw3ICs2NTUsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBC
dWNrZXRUeXBlPiBtX2hlYWQ7CiAgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBt
X3RhaWw7Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZSo+IG1fYnVmZmVy
OworICAgIENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6SlNWYWx1ZSwgSGFzaE1hcEJ1ZmZlclR5
cGU+IG1fYnVmZmVyOwogICAgIHVpbnQzMl90IG1fa2V5Q291bnQ7CiAgICAgdWludDMyX3QgbV9k
ZWxldGVDb3VudDsKICAgICB1aW50MzJfdCBtX2NhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0u
YXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArOTgsNyBAQCBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJp
YXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5h
dXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90
YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRl
bXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTM2MCw3ICszNjAsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0
CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAg
ICAgICAgbmV3QWxsb2NCYXNlID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6
ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVz
aXJlZENhcGFjaXR5OwpAQCAtNTUwLDcgKzU1MCw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkK
QEAgLTYyMCw3ICs2MjAsNyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTcyMiw3ICs3MjIsNyBAQCB2b2lkIEpTQXJyYXk6OnB1
c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgCiAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczogewpAQCAtODkwLDkg
Kzg5MCw5IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogICAg
ICAgICBhdXRvJiByZXN1bHRCdXR0ZXJmbHkgPSAqcmVzdWx0QXJyYXktPmJ1dHRlcmZseSgpOwog
ICAgICAgICBpZiAoYXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAgIG1l
bWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2Yo
SlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNv
bnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRh
KCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwg
c2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRl
cmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgcmVzdWx0
QnV0dGVyZmx5LnNldFB1YmxpY0xlbmd0aChjb3VudCk7CiAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dEFycmF5OwpAQCAtOTcwLDcgKzk3MCw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRl
eCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdp
bmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRv
IHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAgICAg
IC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNv
dW50KTsKICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkpOwogICAgICAgICBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgKz0gY291bnQ7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSRUxF
QVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJlTnVsbCgpOwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAg
ICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoK
QEAgLTExOTQsNyArMTE5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUlu
ZGV4aW4KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldE1heUJlTnVsbCgpOwogCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sg
Zm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdl
IGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVu
IHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KQEAgLTEy
MzgsNyArMTIzOCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4K
ICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldE1heUJlTnVsbCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVj
ayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQg
d2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2ggc2hpZnRpbmcgYW5kIHRo
ZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3RvcmFnZSBtb2RlLgpAQCAt
MTI4MSw3ICsxMjgxLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4
ZQogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvcjsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0
TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRN
YXlCZU51bGwoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheUNsYXNzOgpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9B
cmd1bWVudHMoRXhlY1N0YXRlKgogICAgIC8vIEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJv
bSBiZWluZyBjYWxsZWQgd2l0aCBhIFJ1bnRpbWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3
aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0
aGlzLT5sZW5ndGgoKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpLmdldE1heUJlTnVsbCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7CiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMx
LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0
dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxM
ZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uYXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICB2b2lk
KiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVs
bHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICBpZiAoIXRlbXAp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAg
ICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBp
ZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgc2l6ZSk7CiAgICAgICAgICAg
ICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKQEAg
LTkwLDcgKzkwLDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Ogog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGxlbmd0aCkgKiBzdGF0aWNfY2FzdDxzaXplX3Q+KGVsZW1lbnRTaXplKTsKLSAgICBtX3Zl
Y3RvciA9IEdpZ2FjYWdlOjp0cnlNYWxsb2Moc2l6ZSk7CisgICAgbV92ZWN0b3IgPSBHaWdhY2Fn
ZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNpemUpOwogICAgIGlmICghbV92ZWN0
b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkKQEAgLTE5Miw3
ICsxOTIsNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGNlbGwpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAg
ICBHaWdhY2FnZTo6ZnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7CisgICAgICAgIEdp
Z2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdl
dCgpKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVkSlNC
dWZmZXIoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9p
ZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICAvLyBOb3RlOiBldmVyeXRoaW5nIGJlbG93
IG11c3QgY29tZSBhZnRlciBhZGRDdXJyZW50VGhyZWFkKCkuCiAgICAgbV92bS0+dHJhcHMoKS5u
b3RpZnlHcmFiQWxsTG9ja3MoKTsKICAgICAKLSAgICBtX3ZtLT5maXJlR2lnYWNhZ2VFbmFibGVk
SWZOZWNlc3NhcnkoKTsKKyAgICBtX3ZtLT5maXJlUHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkSWZO
ZWNlc3NhcnkoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBpZiAoU2Ft
cGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSlNPYmplY3Q6Omhl
YXBTbmFwc2hvdChKU0NlbGwqIGNlbGwKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUHJvcGVy
dHlOYW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBlbnRyeS5rZXkpOwogICAg
IH0KIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCkuZ2V0TWF5QmVOdWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsKICAgICBpZiAoYnV0dGVyZmx5KSB7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IG51bGxwdHI7CiAgICAgICAgIHVp
bnQzMl90IGNvdW50ID0gMDsKQEAgLTYxMyw3ICs2MTMsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC04NzUsNyArODc1LDcgQEAgYm9vbCBKU09i
amVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewot
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC05NzksNyArOTc5LDcgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNbwogICAgICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIHN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpA
QCAtMTAxMSw3ICsxMDExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbElu
ZGV4ZQogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRp
bWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBsZW5ndGgpOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJp
Z2h0KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMs
IHN0cnVjdHVyZSwgcHJvcGVydHlDYXBhY2l0eSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVy
Zmx5LmdldE1heUJlTnVsbCgpLCB2bSwgdGhpcywgc3RydWN0dXJlLCBwcm9wZXJ0eUNhcGFjaXR5
LCBmYWxzZSwgMCwKICAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdC
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwpAQCAtMTA5OSw3ICsxMDk5
LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEluZGV4
aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRU
eXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogCi0gICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMsIG9sZFN0
cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldCgpLmdldE1heUJl
TnVsbCgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFn
ZUJ1dHRlcmZseSh2bSwgdGhpcywgb2xkU3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwg
bV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIG9s
ZFN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBudWtl
U3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5
KTsKQEAgLTExMTcsNDMgKzExMTcsNDMgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
b252ZXJ0VW5kZQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVO
dWxsKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRNYXlCZU51
bGwoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBp
LS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMikpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91c0ludDMyKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50
MzIoKTsKIH0KIAogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRU
b0RvdWJsZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQo
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAKICAgICBzZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKIAogICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMo
KTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyhWTSYgdm0sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgdW5zaWduZWQgcHVibGlj
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVk
IHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAg
IHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpOwogICAg
IApAQCAtMTE2Miw3ICsxMTYyLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0
Q29udmVydAogICAgIAogICAgIG1lbWNweSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCiAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFn
ZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC0xMTgwLDcgKzExODAsNyBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVk
QXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGktLTspCkBAIC0xMjAzLDcg
KzEyMDMsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiB7CiAg
ICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91
YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CkBA
IC0xMjE4LDcgKzEyMTgsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydElu
dDMyCiAgICAgfQogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsK
IH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3Vv
dXMoVk0mIHZtKQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwog
ICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250
aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC0xMjM0LDkgKzEyMzQsOSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmVjdG9yTGVuZ3RoOyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodik7CkBAIC0xMjYxLDcgKzEyNjEsNyBAQCBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTsp
IHsKICAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRBc1ZhbHVlID0g
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGN1cnJlbnQpOwpAQCAtMTI3Niw3
ICsxMjc2LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YgogICAg
IAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlT
dG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC0xMjg0
LDkgKzEyODQsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29u
c3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVj
dG9yTGVuZ3RoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
LmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAg
ICBpZiAodmFsdWUgIT0gdmFsdWUpIHsKQEAgLTEzMTUsOSArMTMxNSw5IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlT
dG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlY3Rvckxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwpAQCAtMTQwOCw4ICsxNDA4LDggQEAgdm9pZCBK
U09iamVjdDo6Y29udmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJ
bmRleFF1aWNrbHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNMZW5n
dGgoKSk7Ci0gICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwor
ICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgY29u
dmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0SW5kZXhRdWlja2x5KHZt
LCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7
CkBAIC0xODYyLDcgKzE4NjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewogICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKQEAgLTIxNjgsNyArMjE2OCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmoKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewpAQCAtMjMyNSw3ICsyMzI1LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmZpbGxHZXR0ZXJQcgogYm9vbCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3Jp
cHRvcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gbWFwID0gbV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBhdXRv
IG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAK
ICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRl
c2NyaXB0b3IudmFsdWUoKSkKQEAgLTIzOTUsNyArMjM5NSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkg
JiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVk
QWNjZXNzb3JzKHZtKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwogICAgIAogICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgpAQCAtMjQyNyw3ICsy
NDI3LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgICAg
ICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwogCiAgICAgICAgIHB1dEluZGV4ZWREZXNjcmlw
dG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgaWYgKGluZGV4
ID49IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQogICAgICAgICAgICAgYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjU1OSw3ICsyNTU5LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3RvckxlbgogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwog
ICAgIAogICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVh
dGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgogICAgIC8vIG9yIGVx
dWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgpAQCAtMjU4MSw3ICsyNTgxLDcgQEAgYm9vbCBKU09i
amVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewpAQCAtMjg2OSw3ICsyODY5
LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogICAgICAgICAK
ICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmli
dXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVu
Z3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTI4ODMsNyArMjg4Myw3IEBAIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKKyAg
ICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTI5MDIsNyArMjkwMiw3IEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b24KICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAg
ICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjkxMiw3ICsyOTEyLDcgQEAgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbgogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMzAxNSw4ICsz
MDE1LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGlm
IChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgaWYgKEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpKQogICAgICAgICAgICAg
aW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9i
dXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICB9CiAKICAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3Ro
KGluZGV4QmlhcywgdmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwpAQCAtMzEz
Miw3ICszMTMyLDcgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
CiBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0KCk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAg
ICBBU1NFUlQobGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUo
KSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKQEAgLTMxODgsMTEgKzMxODgsMTEgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0
ZUFuZFNocmlua0J1dHRlcgogewogICAgIEFTU0VSVChsZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8
IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8
IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVChtX2J1dHRlcmZseS5n
ZXQoKS0+dmVjdG9yTGVuZ3RoKCkgPiBsZW5ndGgpOwotICAgIEFTU0VSVCghbV9idXR0ZXJmbHku
Z2V0KCktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CisgICAg
QVNTRVJUKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA+IGxlbmd0aCk7CisgICAgQVNTRVJU
KCFtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKCkp
KTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBuZXdCdXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTMyMDYsNyAr
MzIwNiw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91dE9mTGkKICAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIGZvciB0aGUgcHJvcGVydHkKICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2
ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KIAotICAgIHJldHVybiBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5nZXQoKS5n
ZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUp
OworICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1
dHRlcmZseS5nZXRNYXlCZU51bGwoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUs
IG5ld1NpemUpOwogfQogCiBzdGF0aWMgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogZ2V0
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25Gb3JHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNl
dHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQpAQCAtMzU1Miw3
ICszNTUyLDcgQEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5Lmdl
dCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjIwMzQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsOSArMjQsOSBAQAogCiAjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgog
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgotI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIK
ICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJDYWdl
ZEJhcnJpZXJQdHIuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKQEAgLTQzLDcgKzQzLDYgQEAK
ICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oIgotI2luY2x1ZGUgPHd0Zi9DYWdlZFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNzgsMTQgKzE3NywxNCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4
aW5nVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgdW5zaWduZWQgZ2V0VmVjdG9y
TGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhp
bmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIHB1dElubGluZUZv
ckpTT2JqZWN0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CkBAIC0yMjEsNyArMjIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
Y2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZSA8
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHJvcGVydHlOYW1lIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSw3ICsyNTQsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7
Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5
QmVOdWxsKCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
TWF5QmVOdWxsKCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKQEAgLTI4MSw3ICsyODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2gg
KGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpLmFzSW50MzIoKSk7CkBAIC0yOTksNyArMjk4LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsK
LSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlC
ZU51bGwoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXRN
YXlCZU51bGwoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVE
X0lOREVYSU5HX1RZUEVTOgpAQCAtMzUzLDcgKzM1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0TWF5QmVOdWxsKCk7
CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19U
WVBFUzoKQEAgLTM3Niw3ICszNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0
SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKLSAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KTsKQEAgLTQzNiw3ICs0MzUsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGlu
aXRpYWxpemVJbmRleChPYmplY3RJbml0aWFsaXphdGlvblNjb3BlJiBzY29wZSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAg
Vk0mIHZtID0gc2NvcGUudm0oKTsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS5nZXQoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBzZXRJbmRl
eFF1aWNrbHlUb1VuZGVjaWRlZCh2bSwgaSwgdik7CkBAIC00OTMsNyArNDkyLDcgQEAgcHVibGlj
OgogICAgIC8vIGJhcnJpZXJzLiBUaGlzIGltcGxpZXMgbm90IGhhdmluZyBhbnkgZGF0YSBmb3Jt
YXQgY29udmVyc2lvbnMuCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVJbmRleFdp
dGhvdXRCYXJyaWVyKE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUmLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewotICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLmdldCgpOworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgewogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NDIsNyArNTQx
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHkuZ2V0
KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhIW1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNTU5LDcgKzU1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9k
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5T
cGFyc2VNb2RlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjY5LDExICs2
NjgsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwog
ICAgIH0KICAgICAgICAgCi0gICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS5nZXRNYXlCZU51bGwoKTsgfQotICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCkuZ2V0TWF5QmVOdWxsKCk7
IH0KKyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldE1heUJlTnVsbCgpOyB9CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJl
dHVybiBtX2J1dHRlcmZseS5nZXRNYXlCZU51bGwoKTsgfQogICAgIAotICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsg
fQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsgfQogCiAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25G
b3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgIHsKQEAgLTgwNyw3ICs4
MDYsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUludDMyKFZNJiB2
bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKSkK
LSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7
CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwogICAg
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3codm0pOwogICAgIH0KQEAg
LTgxOSw3ICs4MTgsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91
YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKGluZGV4aW5n
VHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZt
KTsKICAgICB9CkBAIC04MjksNyArODI4LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyBlbnN1cmVDb250aWd1b3VzKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
aGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlQ29u
dGlndW91c1Nsb3codm0pOwogICAgIH0KQEAgLTg0MSw3ICs4NDAsNyBAQCBwdWJsaWM6CiAgICAg
QXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoVk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIHJldHVybiBl
bnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC04OTMsNyArODkyLDcgQEAgcHJv
dGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwg
dGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Ig
bm90IHRoZQpAQCAtOTAyLDcgKzkwMSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIDA7CkBAIC05NjgsMTMgKzk2NywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVChs
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgICAgIEFTU0VSVChoYXND
b250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwg
aGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkp
KTsKIAotICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoKSB7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgp
IHsKICAgICAgICAgICAgIGlmICghZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3RoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQotICAgICAg
ICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAg
ICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAg
bV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTA0Niw3ICsxMDQ1LDcgQEAgcHJpdmF0ZToKICAgICBQ
cm9wZXJ0eU9mZnNldCBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlSUQsIFN0cnVjdHVyZSop
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxCdXR0ZXJmbHk+
PiBtX2J1dHRlcmZseTsKKyAgICBDYWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OkpTVmFsdWUsIEJ1
dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9wYWRkaW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRl
VW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9i
amVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVt
cCA9IHZtLmF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAg
aWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxNSArMTY1LDE5IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcnVuTG9vcChDRlJ1bkxvb3BHZXRD
dXJyZW50KCkpCiAjZW5kaWYgLy8gVVNFKENGKQogICAgICwgaGVhcCh0aGlzLCBoZWFwVHlwZSkK
LSAgICAsIGF1eGlsaWFyeVNwYWNlKCJBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1
dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCAmR2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgY2VsbFNwYWNlKCJK
U0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
c3RhbmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkp
Ci0gICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFj
ZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCAmRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I6Omluc3RhbmNlKCkpCi0gICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsICZGYXN0
TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKLSAgICAsIHNlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhl
YXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5zdGFuY2UoKSkKKyAgICAs
IGZhc3RNYWxsb2NBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcj4oKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6
bWFrZV91bmlxdWU8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJp
bWl0aXZlKSkKKyAgICAsIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVl
PEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQorICAg
ICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1
eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlv
biwgSGVhcENlbGw6OkF1eGlsaWFyeSksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2Ug
QXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERv
ZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlND
ZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2Vs
bDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNl
KCJKU1N0cmluZyIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0
cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgi
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVC
bG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCAmRmFzdE1hbGxv
Y0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omluc3RhbmNlKCkpCisgICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQogI2VuZGlmCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwg
Y2xpZW50RGF0YSgwKQpAQCAtMjExLDcgKzIxNSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fY29kZUNhY2hlKHN0ZDo6bWFrZV91bmlxdWU8Q29k
ZUNhY2hlPigpKQogICAgICwgbV9idWlsdGluRXhlY3V0YWJsZXMoc3RkOjptYWtlX3VuaXF1ZTxC
dWlsdGluRXhlY3V0YWJsZXM+KCp0aGlzKSkKICAgICAsIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENv
dW50KDApCi0gICAgLCBtX2dpZ2FjYWdlRW5hYmxlZChJc1dhdGNoZWQpCisgICAgLCBtX3ByaW1p
dGl2ZUdpZ2FjYWdlRW5hYmxlZChJc1dhdGNoZWQpCiAgICAgLCBtX2NvbnRyb2xGbG93UHJvZmls
ZXJFbmFibGVkQ291bnQoMCkKICAgICAsIG1fc2hhZG93Q2hpY2tlbihzdGQ6Om1ha2VfdW5pcXVl
PFNoYWRvd0NoaWNrZW4+KCkpCiB7CkBAIC0yOTAsNyArMjk0LDcgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGluaXRpYWxpemVIb3N0Q2FsbFJldHVyblZh
bHVlKCk7IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNvbnZpbmNlIHRoZSBsaW5rZXIgbm90IHRvIGRy
b3AgaG9zdCBjYWxsIHJldHVybiBzdXBwb3J0LgogI2VuZGlmCiAgICAgCi0gICAgR2lnYWNhZ2U6
OmFkZERpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOworICAg
IEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKIAogICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCk7CiAgICAgCkBAIC0zNTQsNyArMzU4LDcgQEAgVk06On5WTSgpCiB7CiAgICAgYXV0byBkZXN0
cnVjdGlvbkxvY2tlciA9IGhvbGRMb2NrKHNfZGVzdHJ1Y3Rpb25Mb2NrLnJlYWQoKSk7CiAgICAg
Ci0gICAgR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2FibGVkQ2Fs
bGJhY2ssIHRoaXMpOworICAgIEdpZ2FjYWdlOjpyZW1vdmVQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKICAgICBwcm9taXNl
RGVmZXJyZWRUaW1lci0+c3RvcFJ1bm5pbmdUYXNrcygpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICBpZiAoV2FzbTo6ZXhpc3RpbmdXb3JrbGlzdE9yTnVsbCgpKQpAQCAtNDIzLDIxICs0
MjcsMjEgQEAgVk06On5WTSgpCiAjZW5kaWYKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VEaXNhYmxl
ZENhbGxiYWNrKHZvaWQqIGFyZ3VtZW50KQordm9pZCBWTTo6cHJpbWl0aXZlR2lnYWNhZ2VEaXNh
YmxlZENhbGxiYWNrKHZvaWQqIGFyZ3VtZW50KQogewotICAgIHN0YXRpY19jYXN0PFZNKj4oYXJn
dW1lbnQpLT5naWdhY2FnZURpc2FibGVkKCk7CisgICAgc3RhdGljX2Nhc3Q8Vk0qPihhcmd1bWVu
dCktPnByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIH0KIAotdm9pZCBWTTo6Z2lnYWNhZ2VE
aXNhYmxlZCgpCit2b2lkIFZNOjpwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkKCkKIHsKICAgICBp
ZiAobV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKSB7Ci0gICAgICAgIG1f
Z2lnYWNhZ2VFbmFibGVkLmZpcmVBbGwoKnRoaXMsICJHaWdhY2FnZSBkaXNhYmxlZCIpOworICAg
ICAgICBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZC5maXJlQWxsKCp0aGlzLCAiUHJpbWl0aXZl
IGdpZ2FjYWdlIGRpc2FibGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgCiAgICAgLy8g
VGhpcyBpcyB0b3RhbGx5IHJhY3ksIGFuZCB0aGF0J3MgT0suIFRoZSBwb2ludCBpcywgaXQncyB1
cCB0byB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCB0aGV5IHBhc3MgdGhlCiAgICAgLy8gdW5jYWdl
ZCBidWZmZXIgaW4gYSBuaWNlbHkgc3luY2hyb25pemVkIG1hbm5lci4KLSAgICBtX25lZWRUb0Zp
cmVHaWdhY2FnZUVuYWJsZWQgPSB0cnVlOworICAgIG1fbmVlZFRvRmlyZVByaW1pdGl2ZUdpZ2Fj
YWdlRW5hYmxlZCA9IHRydWU7CiB9CiAKIHZvaWQgVk06OnNldExhc3RTdGFja1RvcCh2b2lkKiBs
YXN0U3RhY2tUb3ApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDIyMDM0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRl
IDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0dpZ2FjYWdlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtOTUsNiAr
OTYsOCBAQCBjbGFzcyBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7
CiBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGNlcHRpb25TY29wZTsKK2NsYXNzIEZhc3RNYWxs
b2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBU
eXBlUHJvZmlsZXJMb2c7CkBAIC0yODUsNyArMjg4LDMwIEBAIHByaXZhdGU6CiBwdWJsaWM6CiAg
ICAgSGVhcCBoZWFwOwogICAgIAotICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gZmFzdE1hbGxv
Y0FsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yPiBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3I7
CisgICAgCisgICAgU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8g
VHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBTdWJz
cGFjZSBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5
cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCisKKyAgICAvLyBXZSBtYWtlIGNyb3NzLWN1dHRp
bmcgYXNzdW1wdGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlzIGJlaW5nIGluIHRoZSBwcmltaXRpdmUg
R2lnYWNhZ2UgYW5kIGJ1dHRlcmZsaWVzCisgICAgLy8gYmVpbmcgaW4gdGhlIEpTVmFsdWUgZ2ln
YWNhZ2UuIEZvciBzb21lIHR5cGVzLCBpdCdzIHN1cGVyIG9idmlvdXMgd2hlcmUgdGhleSBzaG91
bGQgZ28sIGFuZCBzbyB3ZQorICAgIC8vIGNhbiBoYXJkY29kZSB0aGF0IGZhY3QuIEJ1dCBzb21l
dGltZXMgaXQncyBub3QgY2xlYXIsIHNvIHdlIGFic3RyYWN0IGl0IGJ5IGhhdmluZyBhIEdpZ2Fj
YWdlOjpLaW5kCisgICAgLy8gY29uc3RhbnQgc29tZXdoZXJlLgorICAgIC8vIEZJWE1FOiBNYXli
ZSBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgZXZlcnlvbmUgYWJzdHJhY3RlZCB0aGlzPworICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNDgKKyAgICBBTFdB
WVNfSU5MSU5FIFN1YnNwYWNlJiBnaWdhY2FnZUF1eGlsaWFyeVNwYWNlKEdpZ2FjYWdlOjpLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBHaWdh
Y2FnZTo6UHJpbWl0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2U7CisgICAgICAgIGNhc2UgR2lnYWNhZ2U6OkpTVmFsdWU6CisgICAgICAgICAg
ICByZXR1cm4ganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CisgICAgICAgIH0KKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7CisgICAgfQogICAgIAogICAgIC8vIFdoZW5ldmVyIHBv
c3NpYmxlLCB1c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9mIHRoZXNl
IHN1YnNwYWNlcy4KICAgICBTdWJzcGFjZSBjZWxsU3BhY2U7CkBAIC01MjQsMTEgKzU1MCwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCogbGFzdFN0YWNrVG9wKCkgeyByZXR1cm4gbV9sYXN0U3RhY2tU
b3A7IH0KICAgICB2b2lkIHNldExhc3RTdGFja1RvcCh2b2lkKik7CiAgICAgCi0gICAgdm9pZCBm
aXJlR2lnYWNhZ2VFbmFibGVkSWZOZWNlc3NhcnkoKQorICAgIHZvaWQgZmlyZVByaW1pdGl2ZUdp
Z2FjYWdlRW5hYmxlZElmTmVjZXNzYXJ5KCkKICAgICB7Ci0gICAgICAgIGlmIChtX25lZWRUb0Zp
cmVHaWdhY2FnZUVuYWJsZWQpIHsKLSAgICAgICAgICAgIG1fbmVlZFRvRmlyZUdpZ2FjYWdlRW5h
YmxlZCA9IGZhbHNlOwotICAgICAgICAgICAgbV9naWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhp
cywgIkdpZ2FjYWdlIGRpc2FibGVkIGFzeW5jaHJvbm91c2x5Iik7CisgICAgICAgIGlmIChtX25l
ZWRUb0ZpcmVQcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1fbmVlZFRv
RmlyZVByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9wcmlt
aXRpdmVHaWdhY2FnZUVuYWJsZWQuZmlyZUFsbCgqdGhpcywgIlByaW1pdGl2ZSBnaWdhY2FnZSBk
aXNhYmxlZCBhc3luY2hyb25vdXNseSIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MzMsNyAr
NjU5LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBVc2UgQXRvbWljU3RyaW5nIG9uY2UgaXQg
Z290IG1lcmdlZCB3aXRoIElkZW50aWZpZXIuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
ZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKICAgICAKLSAgICBJbmxpbmVXYXRjaHBv
aW50U2V0JiBnaWdhY2FnZUVuYWJsZWQoKSB7IHJldHVybiBtX2dpZ2FjYWdlRW5hYmxlZDsgfQor
ICAgIElubGluZVdhdGNocG9pbnRTZXQmIHByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpIHsgcmV0
dXJuIG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOyB9CiAKICAgICBCdWlsdGluRXhlY3V0YWJs
ZXMqIGJ1aWx0aW5FeGVjdXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1dGFibGVzLmdl
dCgpOyB9CiAKQEAgLTc0MSw4ICs3NjcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQodW5zaWduZWQgZGVwdGgsIEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24mKTsKICNlbmRpZgogICAgIAotICAgIHN0YXRpYyB2b2lkIGdpZ2FjYWdlRGlzYWJs
ZWRDYWxsYmFjayh2b2lkKik7Ci0gICAgdm9pZCBnaWdhY2FnZURpc2FibGVkKCk7CisgICAgc3Rh
dGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrKHZvaWQqKTsKKyAgICB2
b2lkIHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWQoKTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIp
CiAgICAgYm9vbCBtX2NhblVzZUFzc2VtYmxlcjsKQEAgLTc4Nyw4ICs4MTMsOCBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXI+IG1fdHlwZVByb2ZpbGVyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlUHJvZmlsZXJMb2c+IG1fdHlwZVByb2ZpbGVyTG9nOwogICAg
IHVuc2lnbmVkIG1fdHlwZVByb2ZpbGVyRW5hYmxlZENvdW50OwotICAgIGJvb2wgbV9uZWVkVG9G
aXJlR2lnYWNhZ2VFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1f
Z2lnYWNhZ2VFbmFibGVkOworICAgIGJvb2wgbV9uZWVkVG9GaXJlUHJpbWl0aXZlR2lnYWNhZ2VF
bmFibGVkIHsgZmFsc2UgfTsKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fcHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEZsb3dQcm9maWxlcj4g
bV9jb250cm9sRmxvd1Byb2ZpbGVyOwogICAgIHVuc2lnbmVkIG1fY29udHJvbEZsb3dQcm9maWxl
ckVuYWJsZWRDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmIChtX21lbW9yaWVzLnNpemUoKSA+PSBtX21heENvdW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBNZW1vcnlSZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5j
R0NBbmRSZXRyeSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdp
Z2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygp
KTsKKyAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IEdpZ2FjYWdlOjp0cnlBbGxvY2F0ZVZpcnR1
YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBNZW1vcnlS
ZXN1bHQobnVsbHB0ciwgTWVtb3J5UmVzdWx0OjpTeW5jR0NBbmRSZXRyeSk7CiAgICAgICAgICAg
ICAKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB7CiAgICAgICAg
ICAgICBhdXRvIGhvbGRlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBHaWdhY2Fn
ZTo6ZnJlZVZpcnR1YWxQYWdlcyhiYXNlUHRyLCBNZW1vcnk6OmZhc3RNYXBwZWRCeXRlcygpKTsK
KyAgICAgICAgICAgIEdpZ2FjYWdlOjpmcmVlVmlydHVhbFBhZ2VzKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VQdHIsIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCkpOwogICAgICAgICAgICAgbV9t
ZW1vcmllcy5yZW1vdmVGaXJzdChiYXNlUHRyKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTMx
Miw3ICszMTIsNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFBhCiAg
ICAgaWYgKCFpbml0aWFsQnl0ZXMpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KGluaXRpYWwsIG1heGltdW0pKTsKICAgICAKLSAgICB2b2lkKiBzbG93TWVtb3J5ID0gR2lnYWNh
Z2U6OnRyeUFsaWduZWRNYWxsb2MoV1RGOjpwYWdlU2l6ZSgpLCBpbml0aWFsQnl0ZXMpOworICAg
IHZvaWQqIHNsb3dNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBXVEY6OnBhZ2VTaXplKCksIGluaXRpYWxCeXRlcyk7CiAgICAgaWYgKCFzbG93
TWVtb3J5KSB7CiAgICAgICAgIG1lbW9yeU1hbmFnZXIoKS5mcmVlUGh5c2ljYWxCeXRlcyhpbml0
aWFsQnl0ZXMpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMzMSw3ICszMzEsNyBAQCBN
ZW1vcnk6On5NZW1vcnkoKQogICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVWaXJ0dWFs
UGFnZXMobV9tZW1vcnkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmc6Ci0gICAgICAgICAgICBHaWdhY2FnZTo6YWxpZ25lZEZyZWUo
bV9tZW1vcnkpOworICAgICAgICAgICAgR2lnYWNhZ2U6OmFsaWduZWRGcmVlKEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzc4LDEzICszNzgsMTMgQEAgYm9vbCBNZW1vcnk6Omdyb3coVk0mIHZtLCBQYWdlQ291
bnQgbmV3UwogICAgIGNhc2UgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc6IHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobWF4aW11bSgpLmJ5dGVzKCkgIT0gMCk7CiAgICAgICAgIAotICAgICAg
ICB2b2lkKiBuZXdNZW1vcnkgPSBHaWdhY2FnZTo6dHJ5QWxpZ25lZE1hbGxvYyhXVEY6OnBhZ2VT
aXplKCksIGRlc2lyZWRTaXplKTsKKyAgICAgICAgdm9pZCogbmV3TWVtb3J5ID0gR2lnYWNhZ2U6
OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgV1RGOjpwYWdlU2l6ZSgpLCBk
ZXNpcmVkU2l6ZSk7CiAgICAgICAgIGlmICghbmV3TWVtb3J5KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9zaXplKTsKICAg
ICAgICAgbWVtc2V0KHN0YXRpY19jYXN0PGNoYXIqPihuZXdNZW1vcnkpICsgbV9zaXplLCAwLCBk
ZXNpcmVkU2l6ZSAtIG1fc2l6ZSk7CiAgICAgICAgIGlmIChtX21lbW9yeSkKLSAgICAgICAgICAg
IEdpZ2FjYWdlOjphbGlnbmVkRnJlZShtX21lbW9yeSk7CisgICAgICAgICAgICBHaWdhY2FnZTo6
YWxpZ25lZEZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9tZW1vcnkpOwogICAgICAgICBtX21l
bW9yeSA9IG5ld01lbW9yeTsKICAgICAgICAgbV9tYXBwZWRDYXBhY2l0eSA9IGRlc2lyZWRTaXpl
OwogICAgICAgICBtX3NpemUgPSBkZXNpcmVkU2l6ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzNDMp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE3LTA4LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJpbWl0aXZlIGF1eGlsaWFyaWVzIGFuZCBKU1ZhbHVlIGF1eGlsaWFyaWVzIHNob3VsZCBoYXZl
IHNlcGFyYXRlIGdpZ2FjYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0OTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtaXJyb3JzIHRoZSBjaGFuZ2VzIGZyb20gYm1hbGxvYy9H
aWdhY2FnZS5oLgorICAgICAgICAKKyAgICAgICAgQWxzbyBpdCB0ZWFjaGVzIENhZ2VkUHRyIGhv
dyB0byByZWFzb24gYWJvdXQgbXVsdGlwbGUgZ2lnYWNhZ2VzLgorCisgICAgICAgICogd3RmL0Nh
Z2VkUHRyLmg6CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpnZXQgY29uc3QpOgorICAgICAgICAo
V1RGOjpDYWdlZFB0cjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgICogd3RmL0dpZ2FjYWdl
LmNwcDoKKyAgICAgICAgKEdpZ2FjYWdlOjp0cnlNYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6
OnRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlVmlydHVh
bFBhZ2VzKToKKyAgICAgICAgKEdpZ2FjYWdlOjp0cnlBbGlnbmVkTWFsbG9jKToKKyAgICAgICAg
KEdpZ2FjYWdlOjphbGlnbmVkRnJlZSk6CisgICAgICAgIChHaWdhY2FnZTo6ZnJlZSk6CisgICAg
ICAgICogd3RmL0dpZ2FjYWdlLmg6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2
ZUdpZ2FjYWdlKToKKyAgICAgICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2spOgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6
CisgICAgICAgIChHaWdhY2FnZTo6bmFtZSk6CisgICAgICAgIChHaWdhY2FnZTo6YmFzZVB0cik6
CisgICAgICAgIChHaWdhY2FnZTo6Y2FnZWQpOgorICAgICAgICAoR2lnYWNhZ2U6OmlzQ2FnZWQp
OgorICAgICAgICAoR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MpOgorICAgICAgICAoR2lnYWNh
Z2U6OmFsaWduZWRGcmVlKToKKyAgICAgICAgKEdpZ2FjYWdlOjpmcmVlKToKKyAgICAgICAgKEdp
Z2FjYWdlOjpkaXNhYmxlR2lnYWNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OmFk
ZERpc2FibGVDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6cmVtb3ZlRGlz
YWJsZUNhbGxiYWNrKTogRGVsZXRlZC4KKwogMjAxNy0wOC0wNyAgQnJpYW4gQnVyZyAgPGJidXJn
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgQ0FOVkFTX1BBVEggY29tcGlsYXRpb24gZ3Vh
cmQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ2FnZWRQdHIuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dURi93dGYv
Q2FnZWRQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksMTEgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBw
YXNzZWRLaW5kLCB0eXBlbmFtZSBUPgogY2xhc3MgQ2FnZWRQdHIgewogcHVibGljOgorICAgIHN0
YXRpYyBjb25zdGV4cHIgR2lnYWNhZ2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CisgICAgCiAg
ICAgQ2FnZWRQdHIoVCogcHRyID0gbnVsbHB0cikKICAgICAgICAgOiBtX3B0cihwdHIpCiAgICAg
ewpAQCAtNDAsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQobV9w
dHIpOworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKICAgICB9
CiAgICAgCiAgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKQEAgLTY3LDYgKzY5LDkgQEAgcHVi
bGljOgogICAgIAogICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQog
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4
KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KICAgICAKIHByaXZhdGU6CiAgICAgVCog
bV9wdHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9HaWdhY2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMiBAQAog
I2lmIGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DCiAKIGV4
dGVybiAiQyIgewotY29uc3Qgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7Cit2b2lkKiBjb25zdCBn
X2dpZ2FjYWdlQmFzZVB0cjsKIH0KIAogbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIAotdm9pZCogdHJ5
TWFsbG9jKHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKQog
ewogICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhzaXplKTsKICAgICB2b2lkKiByZWFs
UmVzdWx0OwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMo
c2l6ZV90IHNpemUpCit2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXplX3Qg
c2l6ZSkKIHsKICAgICByZXR1cm4gT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZChzaXpl
KTsKIH0KIAotdm9pZCBmcmVlVmlydHVhbFBhZ2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXpl
KQordm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXpl
KQogewogICAgIE9TQWxsb2NhdG9yOjpyZWxlYXNlRGVjb21taXR0ZWQoYmFzZVB0ciwgc2l6ZSk7
CiB9CkBAIC02Nyw0MiArNjcsNTEgQEAgbmFtZXNwYWNlIEdpZ2FjYWdlIHsKIC8vIGFuZCBzdGF5
IHNjcmFtYmxlZCBleGNlcHQganVzdCBiZWZvcmUgdXNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAzNQogCi12b2lkKiB0cnlBbGlnbmVkTWFsbG9jKHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogdHJ5QWxpZ25lZE1hbGxvYyhLaW5k
IGtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotICAgIHZvaWQqIHJlc3Vs
dCA9IGJtYWxsb2M6OmFwaTo6dHJ5TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBibWFsbG9jOjpI
ZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5
TWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAg
V1RGOjpjb21waWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBhbGln
bmVkRnJlZSh2b2lkKiBwKQordm9pZCBhbGlnbmVkRnJlZShLaW5kIGtpbmQsIHZvaWQqIHApCiB7
Ci0gICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7
CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWdl
ZChraW5kLCBwKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlKHAsIGJtYWxsb2M6OmhlYXBLaW5k
KGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAotdm9pZCogdHJ5TWFsbG9j
KHNpemVfdCBzaXplKQordm9pZCogdHJ5TWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IHNpemUpCiB7
Ci0gICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlNYWxsb2Moc2l6ZSwgYm1hbGxv
Yzo6SGVhcEtpbmQ6OkdpZ2FjYWdlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6
OnRyeU1hbGxvYyhzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21w
aWxlckZlbmNlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBmcmVlKHZvaWQqIHAp
Cit2b2lkIGZyZWUoS2luZCBraW5kLCB2b2lkKiBwKQogewotICAgIGJtYWxsb2M6OmFwaTo6ZnJl
ZShwLCBibWFsbG9jOjpIZWFwS2luZDo6R2lnYWNhZ2UpOworICAgIGlmICghcCkKKyAgICAgICAg
cmV0dXJuOworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FnZWQoa2luZCwgcCkpOworICAgIGJtYWxs
b2M6OmFwaTo6ZnJlZShwLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CiAgICAgV1RGOjpjb21w
aWxlckZlbmNlKCk7CiB9CiAKLXZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKHNpemVfdCBz
aXplKQordm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCBraW5kLCBzaXplX3Qgc2l6
ZSkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25W
aXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6SGVhcEtpbmQ6OkdpZ2FjYWdl
KTsKKyAgICB2b2lkKiByZXN1bHQgPSBibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25WaXJ0
dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwgYm1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwogICAg
IFdURjo6Y29tcGlsZXJGZW5jZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgZnJl
ZVZpcnR1YWxQYWdlcyh2b2lkKiBiYXNlUHRyLCBzaXplX3QpCit2b2lkIGZyZWVWaXJ0dWFsUGFn
ZXMoS2luZCBraW5kLCB2b2lkKiBiYXNlUHRyLCBzaXplX3QpCiB7Ci0gICAgYm1hbGxvYzo6YXBp
OjpmcmVlTGFyZ2VWaXJ0dWFsKGJhc2VQdHIsIGJtYWxsb2M6OkhlYXBLaW5kOjpHaWdhY2FnZSk7
CisgICAgaWYgKCFiYXNlUHRyKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9BU1NFUlQo
aXNDYWdlZChraW5kLCBiYXNlUHRyKSk7CisgICAgYm1hbGxvYzo6YXBpOjpmcmVlTGFyZ2VWaXJ0
dWFsKGJhc2VQdHIsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKICAgICBXVEY6OmNvbXBpbGVy
RmVuY2UoKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwzMCArMzIsNTIgQEAK
ICNkZWZpbmUgR0lHQUNBR0VfRU5BQkxFRCAwCiAKIGV4dGVybiAiQyIgewotZXh0ZXJuIFdURl9F
WFBPUlREQVRBIGNvbnN0IHZvaWQqIGdfZ2lnYWNhZ2VCYXNlUHRyOworZXh0ZXJuIFdURl9FWFBP
UlREQVRBIHZvaWQqIGNvbnN0IGdfZ2lnYWNhZ2VCYXNlUHRyOwogfQogCiBuYW1lc3BhY2UgR2ln
YWNhZ2UgewogCitlbnVtIEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVlCit9Owor
CiBpbmxpbmUgdm9pZCBlbnN1cmVHaWdhY2FnZSgpIHsgfQotaW5saW5lIHZvaWQgZGlzYWJsZUdp
Z2FjYWdlKCkgeyB9CitpbmxpbmUgdm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UoKSB7IH0K
IGlubGluZSBib29sIHNob3VsZEJlRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWlubGlu
ZSB2b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0KLWlu
bGluZSB2b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7
IH0KK2lubGluZSB2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqKSh2b2lk
KiksIHZvaWQqKSB7IH0KK2lubGluZSB2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFj
ayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKSB7IH0KKworQUxXQVlTX0lOTElORSBjb25zdCBjaGFy
KiBuYW1lKEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFByaW1p
dGl2ZToKKyAgICAgICAgcmV0dXJuICJQcmltaXRpdmUiOworICAgIGNhc2UgSlNWYWx1ZToKKyAg
ICAgICAgcmV0dXJuICJKU1ZhbHVlIjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQUxXQVlTX0lOTElORSB2b2lkKiBi
YXNlUHRyKEtpbmQpCit7CisgICAgcmV0dXJuIGdfZ2lnYWNhZ2VCYXNlUHRyOworfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNhZ2VkKFQqIHB0cikgeyByZXR1cm4gcHRyOyB9
CitpbmxpbmUgVCogY2FnZWQoS2luZCwgVCogcHRyKSB7IHJldHVybiBwdHI7IH0KIAotaW5saW5l
IGJvb2wgaXNDYWdlZChjb25zdCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29s
IGlzQ2FnZWQoS2luZCwgY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAKLWlubGluZSB2
b2lkKiB0cnlBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7IHJl
dHVybiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUpOyB9Ci1pbmxpbmUgdm9p
ZCBhbGlnbmVkRnJlZSh2b2lkKiBwKSB7IGZhc3RBbGlnbmVkRnJlZShwKTsgfQotV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSk7Ci1pbmxpbmUgdm9pZCBmcmVl
KHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KK2lubGluZSB2b2lkKiB0cnlBbGlnbmVkTWFsbG9j
KEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7IHJldHVybiB0cnlGYXN0QWxp
Z25lZE1hbGxvYyhhbGlnbm1lbnQsIHNpemUpOyB9CitpbmxpbmUgdm9pZCBhbGlnbmVkRnJlZShL
aW5kLCB2b2lkKiBwKSB7IGZhc3RBbGlnbmVkRnJlZShwKTsgfQorV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qgc2l6ZSk7CitpbmxpbmUgdm9pZCBmcmVlKEtp
bmQsIHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQq
IHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKHNpemVfdCBzaXplKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXModm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVf
dCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwg
dm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOwogCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQog
I2Vsc2UKQEAgLTYzLDEzICs4NSwxMyBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmly
dHVhbFBhZ2VzCiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkKiB0cnlBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFsaWduZWRGcmVlKHZvaWQqKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkKiB0cnlNYWxsb2Moc2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZy
ZWUodm9pZCopOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsaWduZWRNYWxsb2MoS2lu
ZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpOworV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYWxpZ25lZEZyZWUoS2luZCwgdm9pZCopOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eU1hbGxvYyhLaW5kLCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZShLaW5k
LCB2b2lkKik7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQ
YWdlcyhzaXplX3Qgc2l6ZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBh
Z2VzKHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSk7CitXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJhc2VQdHIsIHNpemVf
dCBzaXplKTsKIAogfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDgtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBQcmltaXRpdmUgYXV4aWxpYXJpZXMgYW5kIEpTVmFsdWUg
YXV4aWxpYXJpZXMgc2hvdWxkIGhhdmUgc2VwYXJhdGUgZ2lnYWNhZ2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5MTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8g
Y2hhbmdlIGluIGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgQWRhcHRpbmcgdG8gQVBJIGNo
YW5nZXMgLSB3ZSBub3cgc3BlY2lmeSB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBkaWZmZXJl
bnRseSBhbmQgd2UgbmVlZCB0byBiZQorICAgICAgICBzcGVjaWZpYyBhYm91dCB3aGljaCBHaWdh
Y2FnZSB3ZSdyZSB1c2luZy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVCdWZmZXJNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6R1BVQnVmZmVyKToKKwogMjAxNy0wOC0w
NyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjIwMjk5LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTVk1DbGll
bnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCiAgICAgOiBtX2J1aWx0aW5GdW5jdGlvbnMo
dm0pCiAgICAgLCBtX2J1aWx0aW5OYW1lcygmdm0pCi0gICAgLCBtX291dHB1dENvbnN0cmFpbnRT
cGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgJkZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbnN0YW5jZSgpKQotICAgICwgbV9nbG9i
YWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBP
dXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsICZGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6aW5zdGFuY2UoKSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3Jl
IFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxs
b2NhdG9yLmdldCgpKQorICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2Uo
IldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZt
LmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1t
CShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HUFVCdWZmZXJNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDExIEBA
IEdQVUJ1ZmZlcjo6R1BVQnVmZmVyKEdQVURldmljZSogZGV2aWNlLCAKICAgICAKICAgICBzaXpl
X3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCk7CiAgICAgc2l6ZV90IHBhZ2VBbGlnbmVkU2l6
ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUsIGRhdGEtPmJ5dGVMZW5ndGgoKSk7Ci0g
ICAgdm9pZCogcGFnZUFsaWduZWRDb3B5ID0gR2lnYWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MocGFn
ZVNpemUsIHBhZ2VBbGlnbmVkU2l6ZSk7CisgICAgdm9pZCogcGFnZUFsaWduZWRDb3B5ID0gR2ln
YWNhZ2U6OnRyeUFsaWduZWRNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgcGFnZVNpemUsIHBh
Z2VBbGlnbmVkU2l6ZSk7CiAgICAgaWYgKCFwYWdlQWxpZ25lZENvcHkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtZW1jcHkocGFnZUFsaWduZWRDb3B5LCBkYXRhLT5iYXNlQWRkcmVzcygpLCBkYXRh
LT5ieXRlTGVuZ3RoKCkpOwotICAgIG1fY29udGVudHMgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJv
bUJ5dGVzKHBhZ2VBbGlnbmVkQ29weSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBbXSAodm9pZCogcHRy
KSB7IEdpZ2FjYWdlOjphbGlnbmVkRnJlZShwdHIpOyB9KTsKKyAgICBtX2NvbnRlbnRzID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZUZyb21CeXRlcyhwYWdlQWxpZ25lZENvcHksIGRhdGEtPmJ5dGVMZW5n
dGgoKSwgW10gKHZvaWQqIHB0cikgeyBHaWdhY2FnZTo6YWxpZ25lZEZyZWUoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgcHRyKTsgfSk7CiAgICAgbV9jb250ZW50cy0+cmVmKCk7CiAgICAgQXJyYXlCdWZm
ZXIqIGNhcHR1cmVkQ29udGVudHMgPSBtX2NvbnRlbnRzLmdldCgpOwogICAgIG1fYnVmZmVyID0g
YWRvcHROUygoTVRMQnVmZmVyICopW2RldmljZS0+cGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJX
aXRoQnl0ZXNOb0NvcHk6bV9jb250ZW50cy0+ZGF0YSgpIGxlbmd0aDpwYWdlQWxpZ25lZFNpemUg
b3B0aW9uczpNVExSZXNvdXJjZU9wdGlvbkNQVUNhY2hlTW9kZURlZmF1bHQgZGVhbGxvY2F0b3I6
Xih2b2lkKiwgTlNVSW50ZWdlcikgeyBjYXB0dXJlZENvbnRlbnRzLT5kZXJlZigpOyB9XSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOC0wNiAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFByaW1pdGl2ZSBhdXhpbGlhcmllcyBhbmQg
SlNWYWx1ZSBhdXhpbGlhcmllcyBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBnaWdhY2FnZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkxOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKyAgICAgICAgCisgICAgICAgIFRoZSBkaXNh
YmxlIGNhbGxiYWNrIGlzIGFsbCBhYm91dCB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6cHJpbWl0
aXZlR2lnYWNhZ2VEaXNhYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Om1fd2ViU1FMaXRlRGF0YWJh
c2VUcmFja2VyKToKKyAgICAgICAgKFdlYktpdDo6Z2lnYWNhZ2VEaXNhYmxlZCk6IERlbGV0ZWQu
CisKIDIwMTctMDgtMDcgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIENBTlZBU19QQVRIIGNvbXBpbGF0aW9uIGd1YXJkCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsx
NDYsNyBAQCBzdGF0aWMgY29uc3QgU2Vjb25kcyBub25WaXNpYmxlUHJvY2Vzc0NsCiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdm9pZCBnaWdhY2FnZURpc2FibGVkKHZvaWQqKQorc3Rh
dGljIHZvaWQgcHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCh2b2lkKikKIHsKICAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKIH0KQEAgLTIwMyw3ICsyMDMsNyBAQCBXZWJQcm9jZXNzOjpX
ZWJQcm9jZXNzKCkKICAgICB9KTsKIAogICAgIGlmIChHaWdhY2FnZTo6c2hvdWxkQmVFbmFibGVk
KCkpCi0gICAgICAgIEdpZ2FjYWdlOjphZGREaXNhYmxlQ2FsbGJhY2soZ2lnYWNhZ2VEaXNhYmxl
ZCwgbnVsbHB0cik7CisgICAgICAgIEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZCwgbnVsbHB0cik7CiB9CiAKIFdlYlByb2Nlc3M6
On5XZWJQcm9jZXNzKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJj
ZS9ibWFsbG9jL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3
LTA4LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUHJpbWl0
aXZlIGF1eGlsaWFyaWVzIGFuZCBKU1ZhbHVlIGF1eGlsaWFyaWVzIHNob3VsZCBoYXZlIHNlcGFy
YXRlIGdpZ2FjYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0OTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpbnRyb2R1Y2VzIHR3byBraW5kcyBvZiBHaWdhY2FnZSwgUHJpbWl0
aXZlIGFuZCBKU1ZhbHVlLiBUaGlzIHRyYW5zbGF0ZXMgdG8gdHdvIGtpbmRzIG9mCisgICAgICAg
IEhlYXBLaW5kLCBQcmltaXRpdmVHaWdhY2FnZSBhbmQgSlNWYWx1ZUdpZ2FjYWdlLgorICAgICAg
ICAKKyAgICAgICAgVGhlIG5ldyBzdXBwb3J0IGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgdHVybmlu
ZyBJbmxpbmUuaCBpbnRvIEJJbmxpbmUuaCwgYW5kIElOTElORSBpbnRvIEJJTkxJTkUsIGFuZAor
ICAgICAgICBOT19JTkxJTkUgaW50byBCTk9fSU5MSU5FLgorCisgICAgICAgICogYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2Up
OgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IpOgorICAgICAg
ICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6
OkFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3MpOgorICAgICAgICAqIGJtYWxsb2MvQXN5
bmNUYXNrLmg6CisgICAgICAgICogYm1hbGxvYy9CSW5saW5lLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmguCisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6Cisg
ICAgICAgIChibWFsbG9jOjpDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkNhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgorICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAqIGJtYWxsb2MvR2lnYWNh
Z2UuY3BwOgorICAgICAgICAoR2lnYWNhZ2U6OlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OlBy
aW1pdGl2ZURpc2FibGVDYWxsYmFja3MpOgorICAgICAgICAoR2lnYWNhZ2U6OmVuc3VyZUdpZ2Fj
YWdlKToKKyAgICAgICAgKEdpZ2FjYWdlOjpkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2UpOgorICAg
ICAgICAoR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayk6CisgICAgICAgIChH
aWdhY2FnZTo6cmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKToKKyAgICAgICAgKEdpZ2Fj
YWdlOjpDYWxsYmFja3M6OkNhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChHaWdhY2FnZTo6
ZGlzYWJsZUdpZ2FjYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKEdpZ2FjYWdlOjphZGREaXNhYmxl
Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxs
YmFjayk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9HaWdhY2FnZS5oOgorICAgICAgICAo
R2lnYWNhZ2U6Om5hbWUpOgorICAgICAgICAoR2lnYWNhZ2U6OmJhc2VQdHIpOgorICAgICAgICAo
R2lnYWNhZ2U6OmZvckVhY2hLaW5kKToKKyAgICAgICAgKEdpZ2FjYWdlOjpjYWdlZCk6CisgICAg
ICAgIChHaWdhY2FnZTo6aXNDYWdlZCk6CisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dXNp
bmdHaWdhY2FnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpnaWdhY2FnZUJhc2VQdHIpOgor
ICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvSGVhcEtpbmQuaDoK
KyAgICAgICAgKGJtYWxsb2M6OmlzR2lnYWNhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6Z2lnYWNh
Z2VLaW5kKToKKyAgICAgICAgKGJtYWxsb2M6OmhlYXBLaW5kKToKKyAgICAgICAgKiBibWFsbG9j
L0lubGluZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxsb2MvTWFwLmg6CisgICAgICAgICog
Ym1hbGxvYy9QZXJQcm9jZXNzLmg6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzPFQ+Ojpn
ZXRGYXN0Q2FzZSk6CisgICAgICAgIChibWFsbG9jOjpQZXJQcm9jZXNzPFQ+OjpnZXQpOgorICAg
ICAgICAoYm1hbGxvYzo6UGVyUHJvY2VzczxUPjo6Z2V0U2xvd0Nhc2UpOgorICAgICAgICAqIGJt
YWxsb2MvUGVyVGhyZWFkLmg6CisgICAgICAgIChibWFsbG9jOjpQZXJUaHJlYWQ8VD46OmdldEZh
c3RDYXNlKToKKyAgICAgICAgKiBibWFsbG9jL1ZlY3Rvci5oOgorICAgICAgICAoYm1hbGxvYzo6
VmVjdG9yPFQ+OjpwdXNoKToKKyAgICAgICAgKGJtYWxsb2M6OlZlY3RvcjxUPjo6c2hyaW5rQ2Fw
YWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6VmVjdG9yPFQ+Ojpncm93Q2FwYWNpdHkpOgorCiAy
MDE3LTA4LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSWYg
R2lnYWNhZ2UgaXMgZGlzYWJsZWQsIGJtYWxsb2Mgc2hvdWxkIHNlcnZpY2UgbGFyZ2UgYWxpZ25l
ZCBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIHZtQWxsb2NhdGUKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogCQkxNERENzhDNjE4
RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRE
RDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNz
ZXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ5REI0NTE3RjI0NDcxMDBFQUFCNzkg
LyogRml4ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4OURDRTFFMDA1
NDZENjggLyogSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIEJJbmxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYwMTg5RENFMUUw
MDU0NkQ2OCAvKiBCSW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAyIC8qIE11dGV4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDREQ0VENjE3QTY0OUQ5
MDA5M0IyRjIgLyogTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzhDQjE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyUHJvY2Vzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDZBMDcxN0E2
MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDQzE4RjQ4RDc1MDA5NTA3MDIgLyogUGVyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0
NjlGRDE3QTYxRjFGMDBGOUVBMUQgLyogUGVyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk0LDcgKzk0LDcgQEAKIAkJMTQwRkEwMDIx
OUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcFJhbmdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0
YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGluZU1ldGFkYXRhLmg7
IHBhdGggPSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0VHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlLmNwcDsgcGF0aCA9IGJtYWxs
b2MvT2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTNFNDYw
MTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogQklubGluZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0JJ
bmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjIxODlERTFDRDAw
NTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5l
RW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcEFs
bG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVFREU0
MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
QXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3NlcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRoID0gYm1hbGxvYy9TeXNjYWxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcsMTAgKzI4NywxMCBAQAogCQkJ
CTY1OTlDNUNCMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuaCAqLywKIAkJCQkx
NDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovLAogCQkJCTBGNUJGMTcyMUYy
M0M1NzEwMDI5RDkxRCAvKiBCRXhwb3J0LmggKi8sCisJCQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2
RDY4IC8qIEJJbmxpbmUuaCAqLywKIAkJCQkxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMgLyogQlBs
YXRmb3JtLmggKi8sCiAJCQkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9y
LmggKi8sCiAJCQkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi8sCi0J
CQkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovLAogCQkJCTE0MUQ5QUZG
MUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8sCiAJCQkJNDQyNkUyN0UxQzgzOEVFMDAwOEVC
MDQyIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0MiAvKiBM
b2dnaW5nLmggKi8sCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5
NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlD
MTMwMDExNUM5NyAvKiBIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCRjE0OTFGMjJBOEQ4
MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3OEM5MThG
NDhENzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0REQ3OEM5MThG
NDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRDMDdGNTFD
N0I3MDI2MDA1MUJCNkEgLyogTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qzg5OTJE
MUNDNTc4MzMwMDI3QTA1NyAvKiBMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBG
QTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDM0MykKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ5LDcgKzE0OSw3IEBAIHZvaWQgQWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiAgICAgfQogfQogCi1O
T19JTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKK0JOT19JTkxJTkUgdm9pZCBBbGxv
Y2F0b3I6OnJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwg
c2l6ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUg
PSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgTk9f
SU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0bwogICAgIG1faGVhcC5hbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2Fj
aGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKGxvY2spKTsKIH0KIAotSU5MSU5FIHZvaWQgQWxs
b2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qg
c2l6ZUNsYXNzKQorQklOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEJ1bXBB
bGxvY2F0b3ImIGFsbG9jYXRvciwgc2l6ZV90IHNpemVDbGFzcykKIHsKICAgICBCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX2J1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwogICAg
IGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQpAQCAtMTY2LDEzICsxNjYsMTMgQEAgSU5MSU5F
IHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQgogICAgIHJldHVybiBhbGxvY2F0b3Iu
cmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQWxsb2Nh
dG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKICAgICByZXR1cm4gbV9oZWFwLmFsbG9j
YXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCiB7CiAgICAg
c2l6ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhzaXplKTsKICAgICBCdW1wQWxs
b2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc107CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5jVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHJldmlzaW9uIDIyMDM0MykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgQXN5bmNUYXNrX2gKIAogI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRl
ICJJbmxpbmUuaCIKKyNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNp
bmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgPGF0b21pYz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvQklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QklubGluZS5oCShyZXZpc2lvbiAyMjAzNDMpCShmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SW5saW5lLmg6MjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CSW5saW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGluZV9oCisjZGVmaW5lIElubGluZV9oCisK
KyNkZWZpbmUgSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKKwor
I2RlZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorCisjZW5kaWYgLy8g
SW5saW5lX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQklubGluZS5oCShyZXZpc2lvbiAyMjAzNDMp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTEgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElubGluZV9o
Ci0jZGVmaW5lIElubGluZV9oCisjaWZuZGVmIEJJbmxpbmVfaAorI2RlZmluZSBCSW5saW5lX2gK
IAotI2RlZmluZSBJTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlubGluZQor
I2RlZmluZSBCSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbmxpbmUKIAot
I2RlZmluZSBOT19JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBCTk9f
SU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKIAotI2VuZGlmIC8vIElubGluZV9oCisj
ZW5kaWYgLy8gQklubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcAkocmV2aXNp
b24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRl
ICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5j
bHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CkBAIC00NiwyNyArNDYsMjcgQEAgQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5k
KQogewogfQogCi1OT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxs
Q2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQorQk5PX0lOTElORSB2b2lkKiBD
YWNoZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6
ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+Ojpn
ZXRTbG93Q2FzZSgpLT5hdChoZWFwS2luZCkuYWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoc2l6ZSk7
CiB9CiAKLU5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShI
ZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjph
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkK
IHsKICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNl
KCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKIH0KIAotTk9fSU5M
SU5FIHZvaWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBL
aW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK0JOT19JTkxJTkUgdm9pZCogQ2Fj
aGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtp
bmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9j
YXRlKGFsaWdubWVudCwgc2l6ZSk7CiB9CiAKLU5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9j
YXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKK0JO
T19JTkxJTkUgdm9pZCBDYWNoZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5k
IGhlYXBLaW5kLCB2b2lkKiBvYmplY3QpCiB7CiAgICAgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENh
Y2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5kZWFsbG9jYXRvcigpLmRlYWxsb2Nh
dGUob2JqZWN0KTsKIH0KIAotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nh
c2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1Np
emUpCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUo
SGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAg
cmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdCho
ZWFwS2luZCkuYWxsb2NhdG9yKCkucmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOwogfQpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyMDM0MykK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgorI2luY2x1
ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkRlYWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiRGVidWdIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUg
IklubGluZS5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIK
ICNpbmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2Fj
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmNw
cAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKIAogLy8gRklYTUU6IEFzayBkeWxk
IHRvIHB1dCB0aGlzIGluIGl0cyBvd24gcGFnZSwgYW5kIG1wcm90ZWN0IHRoZSBwYWdlIGFmdGVy
IHdlIGVuc3VyZSB0aGUgZ2lnYWNhZ2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0OTcyCi12b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKK3ZvaWQqIGdfcHJp
bWl0aXZlR2lnYWNhZ2VCYXNlUHRyOwordm9pZCogZ19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwog
CiB1c2luZyBuYW1lc3BhY2UgYm1hbGxvYzsKIApAQCAtNTMsOCArNTQsOCBAQCBzdHJ1Y3QgQ2Fs
bGJhY2sgewogICAgIHZvaWQqIGFyZ3VtZW50IHsgbnVsbHB0ciB9OwogfTsKIAotc3RydWN0IENh
bGxiYWNrcyB7Ci0gICAgQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7
IH0KK3N0cnVjdCBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzIHsKKyAgICBQcmltaXRpdmVEaXNh
YmxlQ2FsbGJhY2tzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IH0KICAgICAKICAg
ICBWZWN0b3I8Q2FsbGJhY2s+IGNhbGxiYWNrczsKIH07CkBAIC02OSw1MiArNzAsNTcgQEAgdm9p
ZCBlbnN1cmVHaWdhY2FnZSgpCiAgICAgICAgICAgICBpZiAoIXNob3VsZEJlRW5hYmxlZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCog
YmFzZVB0ciA9IHRyeVZNQWxsb2NhdGUoR0lHQUNBR0VfU0laRSwgR0lHQUNBR0VfU0laRSArIEdJ
R0FDQUdFX1JVTldBWSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2VQdHIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNh
bFBhZ2VzKGJhc2VQdHIsIEdJR0FDQUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBnX2dpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHI7CisgICAgICAg
ICAgICBmb3JFYWNoS2luZCgKKyAgICAgICAgICAgICAgICBbJl0gKEtpbmQga2luZCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmFuZG9taXplIHdoZXJlIHRoaXMgZ29lcy4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTI0NQorICAgICAgICAgICAgICAgICAgICBiYXNlUHRyKGtpbmQpID0gdHJ5Vk1BbGxv
Y2F0ZShHSUdBQ0FHRV9TSVpFLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVOV0FZKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlUHRyKGtpbmQpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgZ2ln
YWNhZ2UuXG4iLCBuYW1lKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJDUkFTSCgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKGJhc2VQdHIoa2luZCksIEdJR0FD
QUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9KTsKICNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECiB9CiAKLXZvaWQgZGlzYWJsZUdpZ2Fj
YWdlKCkKK3ZvaWQgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlKCkKIHsKICAgICBlbnN1cmVHaWdh
Y2FnZSgpOwotICAgIGlmICghZ19naWdhY2FnZUJhc2VQdHIpIHsKKyAgICBpZiAoIWdfcHJpbWl0
aXZlR2lnYWNhZ2VCYXNlUHRyKSB7CiAgICAgICAgIC8vIEl0IHdhcyBuZXZlciBlbmFibGVkLiBU
aGF0IG1lYW5zIHRoYXQgd2UgbmV2ZXIgZXZlbiBzYXZlZCBhbnkgY2FsbGJhY2tzLiBPciwgd2Ug
aGFkIGFscmVhZHkgZGlzYWJsZWQKICAgICAgICAgLy8gaXQgYmVmb3JlLCBhbmQgYWxyZWFkeSBj
YWxsZWQgdGhlIGNhbGxiYWNrcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBD
YWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPENhbGxiYWNrcz46OmdldCgpOwotICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxDYWxsYmFja3M+
OjptdXRleCgpKTsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAq
UGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6Z2V0KCk7CisgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVD
YWxsYmFja3M+OjptdXRleCgpKTsKICAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxi
YWNrcy5jYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3Vt
ZW50KTsKICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKLSAgICBnX2dpZ2FjYWdl
QmFzZVB0ciA9IG51bGxwdHI7CisgICAgZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHIgPSBudWxs
cHRyOwogfQogCi12b2lkIGFkZERpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQq
KSwgdm9pZCogYXJndW1lbnQpCit2b2lkIGFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lk
ICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7CiAgICAgZW5zdXJlR2lnYWNh
Z2UoKTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VCYXNlUHRyKSB7CisgICAgaWYgKCFnX3ByaW1pdGl2
ZUdpZ2FjYWdlQmFzZVB0cikgewogICAgICAgICAvLyBJdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBv
ciB3ZSB3ZXJlIG5ldmVyIGFibGUgdG8gZW5hYmxlIGl0LgogICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQ2FsbGJhY2tzJiBjYWxs
YmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7Cisg
ICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8UHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPjo6bXV0
ZXgoKSk7CiAgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNoKENhbGxiYWNrKGZ1bmN0aW9uLCBh
cmd1bWVudCkpOwogfQogCi12b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rp
b24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCit2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVD
YWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCiB7Ci0gICAg
Q2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tz
Pjo6bXV0ZXgoKSk7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0g
KlBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46OmdldCgpOworICAgIHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFj
a3MuY2FsbGJhY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuY2FsbGJh
Y2tzW2ldLmZ1bmN0aW9uID09IGZ1bmN0aW9uCiAgICAgICAgICAgICAmJiBjYWxsYmFja3MuY2Fs
bGJhY2tzW2ldLmFyZ3VtZW50ID09IGFyZ3VtZW50KSB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9H
aWdhY2FnZS5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dp
Z2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJB
c3NlcnQuaCIKICNpbmNsdWRlICJCRXhwb3J0LmgiCisjaW5jbHVkZSAiQklubGluZS5oIgogI2lu
Y2x1ZGUgIkJQbGF0Zm9ybS5oIgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKQEAgLTQ0LDIzICs0
NSw2MCBAQAogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDAKICNlbmRpZgogCi1leHRlcm4gIkMi
IEJFWFBPUlQgdm9pZCogZ19naWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9p
ZCogZ19wcmltaXRpdmVHaWdhY2FnZUJhc2VQdHI7CitleHRlcm4gIkMiIEJFWFBPUlQgdm9pZCog
Z19qc1ZhbHVlR2lnYWNhZ2VCYXNlUHRyOwogCiBuYW1lc3BhY2UgR2lnYWNhZ2UgewogCitlbnVt
IEtpbmQgeworICAgIFByaW1pdGl2ZSwKKyAgICBKU1ZhbHVlCit9OworCiBCRVhQT1JUIHZvaWQg
ZW5zdXJlR2lnYWNhZ2UoKTsKIAotQkVYUE9SVCB2b2lkIGRpc2FibGVHaWdhY2FnZSgpOworQkVY
UE9SVCB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpOworCisvLyBUaGlzIHdpbGwgY2Fs
bCB0aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1lZGlhdGVseSBpZiB0aGUgUHJpbWl0aXZlIEdpZ2Fj
YWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KK0JFWFBPUlQgdm9pZCBhZGRQcmltaXRpdmVEaXNh
YmxlQ2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7CitCRVhQT1JUIHZvaWQgcmVtb3Zl
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOworCitCSU5M
SU5FIGNvbnN0IGNoYXIqIG5hbWUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgewor
ICAgIGNhc2UgUHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gIlByaW1pdGl2ZSI7CisgICAgY2Fz
ZSBKU1ZhbHVlOgorICAgICAgICByZXR1cm4gIkpTVmFsdWUiOworICAgIH0KKyAgICBCQ1JBU0go
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQklOTElORSB2b2lkKiYgYmFzZVB0cihLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQcmltaXRpdmU6CisgICAg
ICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKKyAgICBjYXNlIEpTVmFsdWU6
CisgICAgICAgIHJldHVybiBnX2pzVmFsdWVHaWdhY2FnZUJhc2VQdHI7CisgICAgfQorICAgIEJD
UkFTSCgpOworICAgIHJldHVybiBnX3ByaW1pdGl2ZUdpZ2FjYWdlQmFzZVB0cjsKK30KIAotLy8g
VGhpcyB3aWxsIGNhbGwgdGhlIGRpc2FibGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgaWYgdGhlIEdp
Z2FjYWdlIGlzIGN1cnJlbnRseSBkaXNhYmxlZC4KLUJFWFBPUlQgdm9pZCBhZGREaXNhYmxlQ2Fs
bGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Ci1CRVhQT1JUIHZvaWQgcmVtb3ZlRGlzYWJs
ZUNhbGxiYWNrKHZvaWQgKCopKHZvaWQqKSwgdm9pZCopOwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK3ZvaWQgZm9yRWFjaEtpbmQoY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmdW5jKFByaW1p
dGl2ZSk7CisgICAgZnVuYyhKU1ZhbHVlKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQq
IGNhZ2VkKFQqIHB0cikKK0JJTkxJTkUgVCogY2FnZWQoS2luZCBraW5kLCBUKiBwdHIpCiB7CiAg
ICAgQkFTU0VSVChwdHIpOwotICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGdfZ2lnYWNhZ2VC
YXNlUHRyOworICAgIHZvaWQqIGdpZ2FjYWdlQmFzZVB0ciA9IGJhc2VQdHIoa2luZCk7CiAgICAg
aWYgKCFnaWdhY2FnZUJhc2VQdHIpCiAgICAgICAgIHJldHVybiBwdHI7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KApAQCAtNjgsOSArMTA2LDkgQEAgVCogY2FnZWQoVCogcHRyKQog
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJiBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KEdJR0FDQUdFX01BU0spKSk7CiB9CiAKLWlubGluZSBib29sIGlzQ2FnZWQo
Y29uc3Qgdm9pZCogcHRyKQorQklOTElORSBib29sIGlzQ2FnZWQoS2luZCBraW5kLCBjb25zdCB2
b2lkKiBwdHIpCiB7Ci0gICAgcmV0dXJuIGNhZ2VkKHB0cikgPT0gcHRyOworICAgIHJldHVybiBj
YWdlZChraW5kLCBwdHIpID09IHB0cjsKIH0KIAogQkVYUE9SVCBib29sIHNob3VsZEJlRW5hYmxl
ZCgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAyMjAzNDMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw4IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIKICAgICAgICAg
R2lnYWNhZ2U6OmVuc3VyZUdpZ2FjYWdlKCk7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAg
ICBpZiAodXNpbmdHaWdhY2FnZSgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQoZ19n
aWdhY2FnZUJhc2VQdHIpOwotICAgICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uo
Z19naWdhY2FnZUJhc2VQdHIsIEdJR0FDQUdFX1NJWkUsIDApKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQkFTU0VSVChnaWdhY2FnZUJhc2VQdHIoKSk7CisgICAgICAgICAgICBtX2xhcmdlRnJlZS5h
ZGQoTGFyZ2VSYW5nZShnaWdhY2FnZUJhc2VQdHIoKSwgR0lHQUNBR0VfU0laRSwgMCkpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICB9CkBAIC03MCw3ICs3MCwxMiBAQCBIZWFwOjpIZWFwKEhlYXBL
aW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgpCiB7
Ci0gICAgcmV0dXJuIG1fa2luZCA9PSBIZWFwS2luZDo6R2lnYWNhZ2UgJiYgZ19naWdhY2FnZUJh
c2VQdHI7CisgICAgcmV0dXJuIGlzR2lnYWNhZ2UobV9raW5kKSAmJiBnaWdhY2FnZUJhc2VQdHIo
KTsKK30KKwordm9pZCogSGVhcDo6Z2lnYWNhZ2VCYXNlUHRyKCkKK3sKKyAgICByZXR1cm4gR2ln
YWNhZ2U6OmJhc2VQdHIoZ2lnYWNhZ2VLaW5kKG1fa2luZCkpOwogfQogCiB2b2lkIEhlYXA6Omlu
aXRpYWxpemVMaW5lTWV0YWRhdGEoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9u
IDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgfkhlYXAoKSA9IGRlbGV0ZTsKICAgICAK
ICAgICBib29sIHVzaW5nR2lnYWNhZ2UoKTsKKyAgICB2b2lkKiBnaWdhY2FnZUJhc2VQdHIoKTsg
Ly8gTWF5IGNyYXNoIGlmICF1c2luZ0dpZ2FjYWdlKCkuCiAgICAgCiAgICAgdm9pZCBpbml0aWFs
aXplTGluZU1ldGFkYXRhKCk7CiAgICAgdm9pZCBpbml0aWFsaXplUGFnZU1ldGFkYXRhKCk7Cklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwS2luZC5oCShyZXZpc2lvbiAyMjAzNDMpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXBLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsy
NSw1OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRl
ICJCSW5saW5lLmgiCisjaW5jbHVkZSAiR2lnYWNhZ2UuaCIKKwogbmFtZXNwYWNlIGJtYWxsb2Mg
ewogCiBlbnVtIGNsYXNzIEhlYXBLaW5kIHsKICAgICBQcmltYXJ5LAotICAgIEdpZ2FjYWdlCisg
ICAgUHJpbWl0aXZlR2lnYWNhZ2UsCisgICAgSlNWYWx1ZUdpZ2FjYWdlCiB9OwogCi1zdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG51bUhlYXBzID0gMjsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbnVtSGVhcHMgPSAzOworCitCSU5MSU5FIGJvb2wgaXNHaWdhY2FnZShIZWFwS2luZCBoZWFw
S2luZCkKK3sKKyAgICBzd2l0Y2ggKGhlYXBLaW5kKSB7CisgICAgY2FzZSBIZWFwS2luZDo6UHJp
bWFyeToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgSGVhcEtpbmQ6OlByaW1pdGl2
ZUdpZ2FjYWdlOgorICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIEJDUkFTSCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworQklOTElORSBHaWdhY2FnZTo6S2luZCBnaWdhY2FnZUtpbmQoSGVhcEtpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEhlYXBLaW5kOjpQcmltYXJ5OgorICAgICAg
ICBCQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpQcmltaXRpdmU7CisgICAgY2Fz
ZSBIZWFwS2luZDo6UHJpbWl0aXZlR2lnYWNhZ2U6CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6
UHJpbWl0aXZlOworICAgIGNhc2UgSGVhcEtpbmQ6OkpTVmFsdWVHaWdhY2FnZToKKyAgICAgICAg
cmV0dXJuIEdpZ2FjYWdlOjpKU1ZhbHVlOworICAgIH0KKyAgICBCQ1JBU0goKTsKKyAgICByZXR1
cm4gR2lnYWNhZ2U6OlByaW1pdGl2ZTsKK30KKworQklOTElORSBIZWFwS2luZCBoZWFwS2luZChH
aWdhY2FnZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2ln
YWNhZ2U6OlByaW1pdGl2ZToKKyAgICAgICAgcmV0dXJuIEhlYXBLaW5kOjpQcmltaXRpdmVHaWdh
Y2FnZTsKKyAgICBjYXNlIEdpZ2FjYWdlOjpKU1ZhbHVlOgorICAgICAgICByZXR1cm4gSGVhcEtp
bmQ6OkpTVmFsdWVHaWdhY2FnZTsKKyAgICB9CisgICAgQkNSQVNIKCk7CisgICAgcmV0dXJuIEhl
YXBLaW5kOjpQcmltYXJ5OworfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9JbmxpbmUuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9JbmxpbmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbmxpbmVfaAot
I2RlZmluZSBJbmxpbmVfaAotCi0jZGVmaW5lIElOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkgaW5saW5lCi0KLSNkZWZpbmUgTk9fSU5MSU5FIF9fYXR0cmlidXRlX18oKG5vaW5s
aW5lKSkKLQotI2VuZGlmIC8vIElubGluZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHJldmlz
aW9uIDIyMDM0MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTWFwX2gKICNkZWZpbmUgTWFwX2gKIAotI2lu
Y2x1ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJTaXplcy5o
IgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Bl
clByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nl
c3MuaAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9j
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGVyUHJvY2Vz
c19oCiAjZGVmaW5lIFBlclByb2Nlc3NfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVk
ZSAiQklubGluZS5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiU3RhdGljTXV0ZXgu
aCIKICNpbmNsdWRlIDxtdXRleD4KQEAgLTcxLDEzICs3MSwxMyBAQCBwcml2YXRlOgogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRGYXN0Q2Fz
ZSgpCitCSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1
cm4gc19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLUlOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQorQklOTElORSBU
KiBQZXJQcm9jZXNzPFQ+OjpnZXQoKQogewogICAgIFQqIG9iamVjdCA9IGdldEZhc3RDYXNlKCk7
CiAgICAgaWYgKCFvYmplY3QpCkBAIC04Niw3ICs4Niw3IEBAIElOTElORSBUKiBQZXJQcm9jZXNz
PFQ+OjpnZXQoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5MSU5FIFQqIFBlclBy
b2Nlc3M8VD46OmdldFNsb3dDYXNlKCkKK0JOT19JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0
U2xvd0Nhc2UoKQogewogICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhzX211
dGV4KTsKICAgICBpZiAoIXNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSkp
IHsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyVGhyZWFkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkocmV2aXNpb24gMjIwMzQzKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsOCBAQAogI2lmbmRlZiBQZXJUaHJlYWRfaAogI2RlZmluZSBQZXJUaHJlYWRfaAog
CisjaW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUg
IklubGluZS5oIgogI2luY2x1ZGUgIlBlckhlYXBLaW5kLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0
ZS5oIgogI2luY2x1ZGUgPG11dGV4PgpAQCAtMTE1LDcgKzExNSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0ZDo6b25jZV9mbGFnIFBlclQKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotSU5MSU5FIFQqIFBlclRocmVhZDxUPjo6Z2V0RmFzdENhc2UoKQorQklOTElORSBUKiBQZXJU
aHJlYWQ8VD46OmdldEZhc3RDYXNlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KFBl
clRocmVhZFN0b3JhZ2U8VD46OmdldCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3Iu
aAkocmV2aXNpb24gMjIwMzQzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBWZWN0b3JfaAogI2RlZmlu
ZSBWZWN0b3JfaAogCi0jaW5jbHVkZSAiSW5saW5lLmgiCisjaW5jbHVkZSAiQklubGluZS5oIgog
I2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGNz
dHJpbmc+CkBAIC0xMTksNyArMTE5LDcgQEAgaW5saW5lIFQmIFZlY3RvcjxUPjo6b3BlcmF0b3Jb
XShzaXplX3QgaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIHZvaWQgVmVjdG9y
PFQ+OjpwdXNoKGNvbnN0IFQmIHZhbHVlKQorQklOTElORSB2b2lkIFZlY3RvcjxUPjo6cHVzaChj
b25zdCBUJiB2YWx1ZSkKIHsKICAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCiAgICAgICAg
IGdyb3dDYXBhY2l0eSgpOwpAQCAtMjEyLDE0ICsyMTIsMTQgQEAgdm9pZCBWZWN0b3I8VD46OnJl
YWxsb2NhdGVCdWZmZXIoc2l6ZV90IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fSU5M
SU5FIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSgpCitCTk9fSU5MSU5FIHZvaWQgVmVj
dG9yPFQ+OjpzaHJpbmtDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4
KGluaXRpYWxDYXBhY2l0eSgpLCBtX2NhcGFjaXR5IC8gc2hyaW5rRmFjdG9yKTsKICAgICByZWFs
bG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5P
X0lOTElORSB2b2lkIFZlY3RvcjxUPjo6Z3Jvd0NhcGFjaXR5KCkKK0JOT19JTkxJTkUgdm9pZCBW
ZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4
KGluaXRpYWxDYXBhY2l0eSgpLCBtX3NpemUgKiBncm93RmFjdG9yKTsKICAgICByZWFsbG9jYXRl
QnVmZmVyKG5ld0NhcGFjaXR5KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>