<?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>159921</bug_id>
          
          <creation_ts>2016-07-19 08:13:28 -0700</creation_ts>
          <short_desc>run-builtins-generator-tests should be able to test WebCore builtins wrapper with more than one file</short_desc>
          <delta_ts>2016-07-22 10:04:50 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1212368</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-19 08:13:28 -0700</bug_when>
    <thetext>run-builtins-generator-tests should be able to test WebCore builtins wrapper with more than one file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212375</commentid>
    <comment_count>1</comment_count>
      <attachid>284008</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-19 08:47:47 -0700</bug_when>
    <thetext>Created attachment 284008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212376</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-19 08:49:18 -0700</bug_when>
    <thetext>Attachment 284008 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:86:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:87:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 2 in 8 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>1212396</commentid>
    <comment_count>3</comment_count>
      <attachid>284014</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-19 09:44:36 -0700</bug_when>
    <thetext>Created attachment 284014
Fixing CMake build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212397</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-19 09:45:32 -0700</bug_when>
    <thetext>Attachment 284014 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:86:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:87:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 2 in 8 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>1212405</commentid>
    <comment_count>5</comment_count>
      <attachid>284014</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-19 10:09:18 -0700</bug_when>
    <thetext>Comment on attachment 284014
Fixing CMake build

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Updated built-in generator to generate only wrapper files when passed the--wrapper option.

Typo: &apos;the --wrapper&apos;

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        WebCore separate test files.

Not quite sure I follow this sentence.

&gt; Source/WebCore/ChangeLog:11
&gt; +        builtin generator is now called for each individula built-in file plus once for WebCore wrapper files.

Typos, grammar

&gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:45
&gt; +    return framework_name + &apos;-Wrappers-result&apos; if generate_wrapper_files else os.path.basename(builtins_files[0]) + &apos;-result&apos;

Please use block if-else, it&apos;s easier to read here where we have nontrivial branches.

&gt; Source/JavaScriptCore/Scripts/tests/builtins/expected/WebCore-Wrappers-result:1
&gt; +### Begin File: WebCoreJSBuiltins.h

I think the generated result file name should be WebCoreJSBuiltins.h-result, so its closer to the naming for other files. At the least it needs a valid extension before -result.

&gt; Source/WebCore/CMakeLists.txt:3761
&gt; +    OUTPUT ${DERIVED_SOURCES_WEBCORE_DIR}/WebCoreJSBuiltins.cpp

Just so everyone is on the same page, you should explain in the changelog why it is desirable/necessary to create a combined builtins file. IIRC, we were trying to move *away* from this approach for JSC builtins but never got all the way there.

&gt; Source/WebCore/DerivedSources.make:-1322
&gt; -# WebCore_BUILTINS_SOURCE_LIST = $(shell echo $(WebCore_BUILTINS_SOURCES) | perl -e &apos;print &quot; &quot; . join(&quot; -I&quot;, split(&quot; &quot;, &lt;&gt;));&apos;)

Sidenote: this use of Perl is unnecessary, the same can be achieved with 

$(patsubst %,-I%,$(WebCore_BUILTINS_SOURCES))

&gt; Tools/Scripts/webkitpy/codegen/main.py:59
&gt; +                self.write_error_file(framework_name + &quot;-Wrappers&quot; if generate_wrappers else builtins_files[0], output_directory, stderr_output)

Should have -error suffix like other results.

&gt; Tools/Scripts/webkitpy/codegen/main.py:112
&gt; +            work_directory = tempfile.mkdtemp()

I recommend giving a mkdtemp directory a prefix or suffix, so it can be found by searching (i.e., using `find`) if necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212482</commentid>
    <comment_count>6</comment_count>
      <attachid>284036</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-19 13:13:51 -0700</bug_when>
    <thetext>Created attachment 284036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212484</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-19 13:15:27 -0700</bug_when>
    <thetext>Attachment 284036 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:88:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:89:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 2 in 8 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>1212726</commentid>
    <comment_count>8</comment_count>
      <attachid>284103</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-20 07:18:56 -0700</bug_when>
    <thetext>Created attachment 284103
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212727</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-20 07:21:22 -0700</bug_when>
    <thetext>Attachment 284103 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:88:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:89:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 2 in 10 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>1213244</commentid>
    <comment_count>10</comment_count>
      <attachid>284103</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-21 12:22:36 -0700</bug_when>
    <thetext>Comment on attachment 284103
Rebasing

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

Great work. There are just a few things left to address:

1) EWS failures
2) WebCore/DerivedSources.make has some issues
3) Given that wrapper generation is now exclusive with other generation, I think the option should be named --wrappers-only. Sorry for being picky about the name, I think I did not understand the patch as well when I made the current suggestion.

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        Added new built-in test file to cover the case of several concatenating several guards in generated WebCore wrapper files.

Nit: extra &apos;several&apos;

&gt; Source/WebCore/ChangeLog:12
&gt; +        WebCore wrapper files allow handling cthings like conditionally guarded features.

Nit: &apos;things&apos;

&gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:88
&gt; +                generators.append(BuiltinsSeparateHeaderGenerator(model, object))

Ok, so now I&apos;m a little confused. Is --wrappers exclusive with generating normal builtins? It&apos;s not clear from the code and change log whether it&apos;s additive or subtractive. If it&apos;s subtractive, --wrappers-only might make more sense.

&gt; Source/WebCore/CMakeLists.txt:3762
&gt; +    OUTPUT ${DERIVED_SOURCES_WEBCORE_DIR}/WebCoreJSBuiltins.cpp

This would be easier to follow if the output files for wrappers actually had Wrappers in the name somehow.

&gt; Source/WebCore/CMakeLists.txt:3768
&gt;      COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py --wrappers --framework WebCore --output-directory ${DERIVED_SOURCES_WEBCORE_DIR} ${WebCore_BUILTINS_SOURCES}

I see, so it would make sense to call it --wrappers-only, as you need to call it a second time.

&gt; Source/WebCore/DerivedSources.make:1328
&gt; +WebCore_BUILTINS_WRAPPER : WebCore_BUILTINS_DEPENDENCIES_LIST

Is WebCore_BUILTINS_WRAPPER a valid target? I don&apos;t see where it&apos;s defined. Shouldn&apos;t it be WebCoreBuiltinsWrappers.h or whatever?

&gt; Source/WebCore/DerivedSources.make:1334
&gt; +all : $(notdir $(WebCore_BUILTINS_SOURCES:%.js=%Builtins.h)) WebCore_BUILTINS_WRAPPER

Same comment as above. This will either not work at all, or expect a file called WebCore_BUILTINS_WRAPPER.

&gt; Tools/Scripts/webkitpy/codegen/main.py:107
&gt; +    def run_test(self, reference_directory, test_name, test_files, generate_builtin):

Nit: I would add _callback suffix to generate_builtin.

&gt; Tools/Scripts/webkitpy/codegen/main.py:108
&gt; +        result = True

Nit: I would rename result to something like &apos;success&apos; since it&apos;s a return code not an object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213263</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-21 13:03:09 -0700</bug_when>
    <thetext>
Thanks for the review.

&gt; 1) EWS failures
Win did not succeed in applying the patch.
I saw this error in another patch so I do not think this is related to this one.
Same for gtk bot which has some issues these days.
Note that elf-wk2 is also exercising CMake build.

&gt; 2) WebCore/DerivedSources.make has some issues
OK

&gt; 3) Given that wrapper generation is now exclusive with other generation, I
&gt; think the option should be named --wrappers-only. Sorry for being picky
&gt; about the name, I think I did not understand the patch as well when I made
&gt; the current suggestion.

OK

&gt; &gt; Source/JavaScriptCore/ChangeLog:13
&gt; &gt; +        Added new built-in test file to cover the case of several concatenating several guards in generated WebCore wrapper files.
&gt; 
&gt; Nit: extra &apos;several&apos;

OK

&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        WebCore wrapper files allow handling cthings like conditionally guarded features.
&gt; 
&gt; Nit: &apos;things&apos;

OK

&gt; &gt; Source/JavaScriptCore/Scripts/generate-js-builtins.py:88
&gt; &gt; +                generators.append(BuiltinsSeparateHeaderGenerator(model, object))
&gt; 
&gt; Ok, so now I&apos;m a little confused. Is --wrappers exclusive with generating
&gt; normal builtins? It&apos;s not clear from the code and change log whether it&apos;s
&gt; additive or subtractive. If it&apos;s subtractive, --wrappers-only might make
&gt; more sense.

It is exclusive, I updated the changelog.

&gt; &gt; Source/WebCore/CMakeLists.txt:3762
&gt; &gt; +    OUTPUT ${DERIVED_SOURCES_WEBCORE_DIR}/WebCoreJSBuiltins.cpp
&gt; 
&gt; This would be easier to follow if the output files for wrappers actually had
&gt; Wrappers in the name somehow.

I am fine changing the name. I chose this name to be close to JSC names (JSCBuiltins.h/.cpp).
I&apos;d like to handle this in another patch if possible.

&gt; &gt; Source/WebCore/CMakeLists.txt:3768
&gt; &gt;      COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py --wrappers --framework WebCore --output-directory ${DERIVED_SOURCES_WEBCORE_DIR} ${WebCore_BUILTINS_SOURCES}
&gt; 
&gt; I see, so it would make sense to call it --wrappers-only, as you need to
&gt; call it a second time.

OK

&gt; &gt; Source/WebCore/DerivedSources.make:1328
&gt; &gt; +WebCore_BUILTINS_WRAPPER : WebCore_BUILTINS_DEPENDENCIES_LIST
&gt; 
&gt; Is WebCore_BUILTINS_WRAPPER a valid target? I don&apos;t see where it&apos;s defined.
&gt; Shouldn&apos;t it be WebCoreBuiltinsWrappers.h or whatever?

It is working but you are right, it is better to define it precisely.
This will remove any potential future glitch.

&gt; &gt; Tools/Scripts/webkitpy/codegen/main.py:107
&gt; &gt; +    def run_test(self, reference_directory, test_name, test_files, generate_builtin):
&gt; 
&gt; Nit: I would add _callback suffix to generate_builtin.

OK

&gt; &gt; Tools/Scripts/webkitpy/codegen/main.py:108
&gt; &gt; +        result = True
&gt; 
&gt; Nit: I would rename result to something like &apos;success&apos; since it&apos;s a return
&gt; code not an object.

I changed it to &quot;passed&quot; to be consistent with run_tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213265</commentid>
    <comment_count>12</comment_count>
      <attachid>284250</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-21 13:05:08 -0700</bug_when>
    <thetext>Created attachment 284250
Fixing according comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213267</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-21 13:06:49 -0700</bug_when>
    <thetext>Attachment 284250 did not pass style-queue:


ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:87:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/Scripts/generate-js-builtins.py:88:  [generate_bindings_for_builtins_files] Undefined variable &apos;BuiltinsSeparateImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 2 in 10 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>1213272</commentid>
    <comment_count>14</comment_count>
      <attachid>284250</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-21 13:22:51 -0700</bug_when>
    <thetext>Comment on attachment 284250
Fixing according comments

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

r=me pending EWS and minor DerivedSources.make fixes.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        When this option is used, wrqpper files are generated but no individual file is generated.

Nit: &apos;wrapper&apos;

&gt; Source/WebCore/DerivedSources.make:1335
&gt; +WebCore_BUILTINS_WRAPPERS : WebCore_BUILTINS_DEPENDENCIES_LIST

This will probably not do what you want. It will call the generator once per file in WebCore_BUILTINS_WRAPPERS. The fix we have been using is to do $(firstword $(WebCore_BUILTINS_WRAPPERS)) when listing it as a target to be made. It will only be made once but all the files will be produced nonetheless.

(Don&apos;t you wish we could just stick to CMake? ;))

&gt; Source/WebCore/DerivedSources.make:1341
&gt; +all : $(notdir $(WebCore_BUILTINS_SOURCES:%.js=%Builtins.h)) WebCore_BUILTINS_WRAPPERS

Unlike the dependencies list, this is not a file. Use $(WebCore_BUILTINS_WRAPPERS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213517</commentid>
    <comment_count>15</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-22 00:48:49 -0700</bug_when>
    <thetext>Thanks for the r+

&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        When this option is used, wrqpper files are generated but no individual file is generated.
&gt; 
&gt; Nit: &apos;wrapper&apos;

OK

&gt; &gt; Source/WebCore/DerivedSources.make:1335
&gt; &gt; +WebCore_BUILTINS_WRAPPERS : WebCore_BUILTINS_DEPENDENCIES_LIST
&gt; 
&gt; This will probably not do what you want. It will call the generator once per
&gt; file in WebCore_BUILTINS_WRAPPERS. The fix we have been using is to do
&gt; $(firstword $(WebCore_BUILTINS_WRAPPERS)) when listing it as a target to be
&gt; made. It will only be made once but all the files will be produced
&gt; nonetheless.

I&apos;ll change that but cannot it cause an issue if the first file is ok but one of the other file needs to be regenerated (like if it is accidentally deleted)?

&gt; (Don&apos;t you wish we could just stick to CMake? ;))

Definitely... 8-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213520</commentid>
    <comment_count>16</comment_count>
      <attachid>284315</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-07-22 01:03:57 -0700</bug_when>
    <thetext>Created attachment 284315
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213522</commentid>
    <comment_count>17</comment_count>
      <attachid>284315</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-22 01:33:12 -0700</bug_when>
    <thetext>Comment on attachment 284315
Patch for landing

Clearing flags on attachment: 284315

Committed r203554: &lt;http://trac.webkit.org/changeset/203554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213523</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-22 01:33:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213612</commentid>
    <comment_count>19</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-07-22 10:04:50 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Thanks for the r+
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; &gt; +        When this option is used, wrqpper files are generated but no individual file is generated.
&gt; &gt; 
&gt; &gt; Nit: &apos;wrapper&apos;
&gt; 
&gt; OK
&gt; 
&gt; &gt; &gt; Source/WebCore/DerivedSources.make:1335
&gt; &gt; &gt; +WebCore_BUILTINS_WRAPPERS : WebCore_BUILTINS_DEPENDENCIES_LIST
&gt; &gt; 
&gt; &gt; This will probably not do what you want. It will call the generator once per
&gt; &gt; file in WebCore_BUILTINS_WRAPPERS. The fix we have been using is to do
&gt; &gt; $(firstword $(WebCore_BUILTINS_WRAPPERS)) when listing it as a target to be
&gt; &gt; made. It will only be made once but all the files will be produced
&gt; &gt; nonetheless.
&gt; 
&gt; I&apos;ll change that but cannot it cause an issue if the first file is ok but
&gt; one of the other file needs to be regenerated (like if it is accidentally
&gt; deleted)?

Unfortunately we are stuck with this problem as long as we use Make. AFAIK there is no good workaround for multiple files derived from one invocation. If you delete the .mm or .cpp from JS DOM bindings, it will also not get regenerated.

&gt; 
&gt; &gt; (Don&apos;t you wish we could just stick to CMake? ;))
&gt; 
&gt; Definitely... 8-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284008</attachid>
            <date>2016-07-19 08:47:47 -0700</date>
            <delta_ts>2016-07-19 09:44:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159921-20160719174648.patch</filename>
            <type>text/plain</type>
            <size>79267</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjY5NmI0NTkxYjlhOWI5MmJmODVjNTAyODJhMGUwOTcwNDg4MGMyLi4wYTg5YmJlZjkyOTM5NDk2
MmMwYTdhMzY4MThhYTM5NjY4NTlkNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNi0wNy0xOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBi
dWlsdC1pbiBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb25seSB3cmFwcGVyIGZpbGVzIHdoZW4gcGFz
c2VkIHRoZS0td3JhcHBlciBvcHRpb24uCisgICAgICAgIFVwZGF0aW5nIHRoZSBidWlsdGluIGdl
bmVyYXRvciB0ZXN0IHJ1bm5lciwgYSBuZXcgZmlsZSBXZWJDb3JlLVdyYXBwZXJzLXJlc3VsdCBp
cyBnZW5lcmF0ZWQgYmFzZWQgb24gYWxsIHZhbGlkCisgICAgICAgIFdlYkNvcmUgc2VwYXJhdGUg
dGVzdCBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHk6
CisgICAgICAgIChjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKTogQ29tcHV0ZSBhIGRlY2Vu
dCBuYW1lIGZvciB3cmFwcGVyIGZpbGVzIGluIGNhc2Ugb2YgdGVzdCBtb2RlLgorICAgICAgICAo
Z2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKTogV2hlbiAtLXdyYXBwZXJzIGlz
IGFjdGl2YXRlZCwgdGhpcyBub3cgZ2VuZXJhdGVzIG9ubHkgdGhlIHdyYXBwZXIgZmlsZXMsIG5v
dCB0aGUgaW5kaXZpZHVhbCBmaWxlcy4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1y
ZXN1bHQ6IFJlbW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVp
bHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6
IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDogRGl0dG8uCisgICAg
ICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1
aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtV3JhcHBlcnMtcmVzdWx0OiBBZGRlZCwgY29udGFp
bnMgd3JhcHBlciBjb2RlIGZvciBhbGwgV2ViQ29yZSB2YWxpZCB0ZXN0IGNhc2VzLgorICAgICAg
ICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0
LVNlcGFyYXRlLmpzLXJlc3VsdDogUmVtb3ZlZCB3cmFwcGVyIGNvZGUuCisKIDIwMTYtMDctMTgg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGJ1
aWx0aW4gVHlwZUVycm9ycyBjb25zaXN0ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2ZmQ5YWM4YWIwN2U4
NWExNWMzMjI2YTgyNDRiYTI2Mjg1MWNjYi4uZjAxMjgzMzM0MmI5Yjc2OTI2MzJkODlkYjNmMDFj
NDgyYmQyY2FkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDE2LTA3LTE5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBydW4tYnVpbHRpbnMtZ2Vu
ZXJhdG9yLXRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFw
cGVyIHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGFuZCByZWJhc2Vk
IGJ1aWx0aW4gdGVzdHMuCisKKyAgICAgICAgVXBkYXRpbmcgYnVpbHQgc3lzdGVtIGFjY29yZGlu
ZyAtLS13cmFwcGVyIG5ldyBtZWFuaW5nLgorICAgICAgICBidWlsdGluIGdlbmVyYXRvciBpcyBu
b3cgY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1bGEgYnVpbHQtaW4gZmlsZSBwbHVzIG9uY2UgZm9y
IFdlYkNvcmUgd3JhcHBlciBmaWxlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisKKzIwMTYtMDctMTkgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgorCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gTWFrZSBSZWFkYWJs
ZVN0cmVhbSBwcm9wZXJ0aWVzIG5vdCBlbnVtZXJhYmxlCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQppbmRleCBkOWU3YzE1
MGVkYTBmM2ZmMzg2NTYyMzQ1OWU2MjZlNDNiZTFhOTFmLi43YjhmNzg0Yjk0NTljYThkYThiNDJh
MWNmYmY0NTgxZGZlMWFhZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQpAQCAtNDEsNiArNDEsMTAgQEAgaW1wb3J0
IGJ1aWx0aW5zCiBmcm9tIGJ1aWx0aW5zIGltcG9ydCAqCiAKIAorZGVmIGNvbmNhdGVuYXRlZF9v
dXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV93
cmFwcGVyX2ZpbGVzKToKKyAgICByZXR1cm4gZnJhbWV3b3JrX25hbWUgKyAnLVdyYXBwZXJzLXJl
c3VsdCcgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlcyBlbHNlIG9zLnBhdGguYmFzZW5hbWUoYnVp
bHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCisKKwogZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zv
cl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNlLApAQCAtNzEs
MTYgKzc1LDE2IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVp
bHRpbnNfZmlsZXM9W10sCiAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zQ29tYmlu
ZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAgICAgZWxzZToKICAgICAgICAgbG9n
LmRlYnVnKCJVc2luZyBnZW5lcmF0b3Igc3R5bGU6IHNpbmdsZSBmaWxlcyBmb3IgZWFjaCBidWls
dGluLiIpCi0gICAgICAgIGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0czoKLSAgICAgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IobW9kZWws
IG9iamVjdCkpCi0gICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRl
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCi0KICAgICAgICAgaWYgZ2Vu
ZXJhdGVfd3JhcHBlcl9maWxlczoKICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0
aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkpCiAgICAgICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChCdWlsdGluc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAK
ICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhl
YWRlckdlbmVyYXRvcihtb2RlbCkpCiAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWls
dGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBmb3Igb2JqZWN0IGluIG1vZGVsLm9iamVjdHM6CisgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUhlYWRlckdlbmVy
YXRvcihtb2RlbCwgb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChC
dWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCiAK
ICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9nLmRlYnVnKCJHZW5lcmF0aW5nIGJpbmRpbmdzIGZv
ciBidWlsdGlucy4iKQpAQCAtMTA3LDkgKzExMSw5IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19m
b3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICBvdXRwdXRf
ZmlsZS5jbG9zZSgpCiAKICAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6Ci0gICAgICAgIGZpbGVu
YW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsg
Jy1yZXN1bHQnKQorICAgICAgICBmaWxlbmFtZSA9IGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5h
bWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVz
KQogICAgICAgICBvdXRwdXRfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIGZp
bGVuYW1lKQotICAgICAgICBsb2cuZGVidWcoIldyaXRpbmcgZmlsZTogJXMiICUgb3V0cHV0X2Zp
bGVwYXRoKSAKKyAgICAgICAgbG9nLmRlYnVnKCJXcml0aW5nIGZpbGU6ICVzIiAlIG91dHB1dF9m
aWxlcGF0aCkKICAgICAgICAgb3V0cHV0X2ZpbGUgPSBMYXp5RmlsZVdyaXRlcihvdXRwdXRfZmls
ZXBhdGgsIGZvcmNlX291dHB1dCkKICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJ1xuJy5qb2lu
KHRlc3RfcmVzdWx0X2ZpbGVfY29udGVudHMpKQogICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMt
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3Vs
dAppbmRleCA4ZTYyZjNhZmNlMDliMTdiMDYwM2I4OGU3MDUwM2M2MjM5MDQ2YjI1Li40ZDcwYThh
MTBjMWI0MWFmZmUxNmE0ZjQxNzQ4NDE2MjA1YTU3NjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0
cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRy
YXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE5NSwyMTkgKzE5NSwz
IEBAIFdFQkNPUkVfRk9SRUFDSF9BUkJJVFJBUllDT05ESVRJT05BTEdVQVJEX0JVSUxUSU5fQ09E
RShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KSB8fCBVU0UoQ0YpCiAKICMjIyBFbmQgRmlsZTogQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1
aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3Vh
cmRCdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgICAgICAsIG1fYXJiaXRyYXJ5Q29u
ZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkgfHwgVVNFKENGKQotICAgIHsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8
IFVTRShDRikKLSAgICBBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBh
cmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNv
bmRpdGlvbmFsR3VhcmRCdWlsdGluczsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgVVNFKENGKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi0gICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0
aW5zV3JhcHBlciBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
aAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlu
cyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xh
c3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlND
OjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYp
OwotCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
cy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQot
ICAgIDogbV92bSh2bSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9i
amVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAg
IGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9M
RU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5q
cy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9l
eHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCAy
MzdhMGI0MTExMjQ2YzVjNTk2ZmQ4MTU2YmVmYTgzZDlkNzZiNWZhLi4zZjgxMzI1MWE0MzhmMGQ4
MTdhZjcwYjJlMjdhOGIxNjA2OTUyZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGlu
LVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90
ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpz
LXJlc3VsdApAQCAtMTk1LDIxOSArMTk1LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURCVUlM
VElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVpbHRpbnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1
aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkKLSAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCi0jZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIHsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRCdWlsdGluQnVp
bHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9n
dWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAK
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
Ci0KLSNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTog
V2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgot
Ly8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50
aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmpl
Y3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9i
YWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6
OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpp
bml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7Ci0gICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Ci0g
ICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBX
VEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50
RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFs
QnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IGIwNDc2Y2I5OTFhMzc4NGQxZGRiNzkyNTFlYWRhNTY2
NTkzMWJlYzUuLjIyYWU1MWU3OWY0NjIxNGUxNzE4OTZmYTM1YTVjNTMwM2ZhZTg5NTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQv
V2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjI3
LDI0NyArMjI3LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJ
TFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5z
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRp
bkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygm
bV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgewotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSAgICAgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhw
b3J0TmFtZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfQotCi0jaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dy
YXBwZXImIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAiCi0jIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9W
TS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0Owot
Ci1jbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9pZCB2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBt
X2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWls
dGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6
Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgLCBt
X2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCi17Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIG1f
Z3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0jaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQotICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi5pbml0KGdsb2JhbE9i
amVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi0jaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKSBcCi0gICAgSlNET01H
bG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyggXAotICAgICAgICBjbGllbnREYXRhLmJ1
aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQ
cml2YXRlTmFtZSgpLCBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9u
LmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCi0gICAgV0VCQ09SRV9G
T1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xB
UkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGlj
R2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsK
LSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMv
YnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJl
c3VsdAppbmRleCAxZWM4ZjQ3MWZjZGQ5NWEzYWEyNGE1MjZhOWJlMDM1YzdkMThlMjJhLi42ZDY4
YWVhYTE5MGJjZWY4ZGY1ZjMxODg1NDAyZWZiMzQyZjc1M2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVu
Z3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVp
bHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4NiwyMTMgKzE4NiwzIEBAIFdFQkNPUkVfRk9S
RUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFU
T1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBFbmQgRmlsZTogVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5C
dWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpT
QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAg
ICAsIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiB1bmd1YXJkZWRCdWlsdGluQnVpbHRp
bnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQotCi1wcml2YXRlOgot
ICAgIEpTQzo6Vk0mIG1fdm07Ci0gICAgVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBt
X3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJVbmd1YXJkZWRCdWls
dGluQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0KLXByaXZhdGU6
Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBF
bmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVk
ZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
Ci0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkK
LXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQot
ICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJv
cGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5h
ZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xv
YmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS1XcmFwcGVycy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVdyYXBwZXJzLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NjE2ODQ2YjRiNWJhYzMwZDIxM2UzYTRjOGFjYTVjZWU1YTA3ZWUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1XcmFwcGVycy1yZXN1bHQKQEAgLTAsMCArMSwzMDcgQEAKKyMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmgiCisj
aW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlu
cy5oIgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlv
bnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENG
KQorICAgICAgICAsIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZtX3ZtKQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAg
ICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMo
Jm1fdm0pCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1feG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB7Cisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5C
dWlsdGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmV4
cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIH0KKworI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFs
R3VhcmRCdWlsdGluc1dyYXBwZXImIGFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygp
IHsgcmV0dXJuIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zOyB9CisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQorICAgIEd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnMoKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsgfQorI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFw
cGVyJiB1bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0
aW5CdWlsdGluczsgfQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0
QnVpbHRpbnNXcmFwcGVyJiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMoKSB7IHJldHVybiBtX3htbENh
c2luZ1Rlc3RCdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJp
dmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNF
KENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJp
dHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRCdWls
dGluQnVpbHRpbnNXcmFwcGVyIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFVuZ3VhcmRlZEJ1aWx0
aW5CdWlsdGluc1dyYXBwZXIgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7CisjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXIgbV94bWxDYXNp
bmdUZXN0QnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5jcHAiCisjaW5jbHVkZSAi
R3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zLmNwcCIKKyNpbmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3Bw
IgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0
aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMo
SlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rpb25zJiB4bWxDYXNpbmdUZXN0KCkgeyByZXR1cm4g
bV94bWxDYXNpbmdUZXN0OyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorCitwcml2
YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRlZEludGVybmFsQnVp
bHRpbjsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rpb25zIG1feG1sQ2FzaW5nVGVzdDsK
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVn
aW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIK
KworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKKyAgICA6
IG1fdm0odm0pCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV9ndWFyZGVkSW50ZXJu
YWxCdWlsdGluKG1fdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQorI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKK3sKK30KKwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZpc2l0b3IpOworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAg
bV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLmluaXQoZ2xvYmFsT2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
ICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEpTVk1DbGllbnRE
YXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGll
bnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRp
Y0dsb2JhbHNbXSA9IHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisjZGVmaW5lIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQyhuYW1lKSBcCisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3Bl
cnR5SW5mbyggXAorICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBndWFyZGVkSW50
ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRl
IHwgSlNDOjpSZWFkT25seSksCisgICAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJV
SUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKKyN1bmRl
ZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFt
ZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKKyAgICAg
ICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkueG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCku
bmFtZSMjUHJpdmF0ZU5hbWUoKSwgeG1sQ2FzaW5nVGVzdCgpLm1fIyNuYW1lIyNGdW5jdGlvbi5n
ZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9S
RUFDSF9YTUxDQVNJTkdURVNUX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9T
VEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIH07CisgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VE
X1BBUkFNKGNsaWVudERhdGEpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggNzQ3MTZl
YTBhZjg0ZTdjMjJkNmU2ZjYwNDRhZDY3NDdhYjcwMGRkMy4uOWRhZTg5Nzc1YmJmMTEwNjQ2Nzk5
NmM0Mzc0MGI5YTQ4NjQwYTEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFy
YXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9i
dWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0
CkBAIC0yNzgsMjQ3ICsyNzgsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVTVF9CVUlM
VElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0
aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0m
IHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAg
ICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX3htbENh
c2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgWE1MQ2FzaW5nVGVz
dEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyByZXR1cm4gbV94bWxD
YXNpbmdUZXN0QnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXBy
aXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAg
WE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsKLSNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuaCIKLSNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01H
bG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0K
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0dXJuIG1feG1s
Q2FzaW5nVGVzdDsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0ZToK
LSAgICBKU0M6OlZNJiBtX3ZtOwotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxDYXNp
bmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7Ci0jZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxl
OiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNs
dWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgOiBtX3ZtKHZtKQotI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKLSAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LmluaXQoZ2xvYmFsT2Jq
ZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpH
bG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpIFwKLSAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCi0gICAgICAgIGNsaWVudERhdGEuYnVp
bHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1l
KCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnRE
ZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKLSAgICBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVT
VF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERF
Q0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9
OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggM2Q3NTY2MWU5ZDg0OWViOTllNzAwNzUxYzYxNDA3ZGVjMmI4NDBm
NS4uNWE4NGUwMzdhOGMxM2ZlNTQ3NDViZDRkZTY4YTVjZmFlYTJjNDM5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTExNDgsNyArMTE0OCw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCi0gICAg
YmluZGluZ3MvanMvSlNGZXRjaFJlc3BvbnNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pT
RmlsZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTM3NDYsMjEgKzM3NDUs
MzAgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAKIGZvcmVhY2ggKF9idWlsdGlu
U291cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29t
cG9uZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuaCkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2Jq
ZWN0TmFtZX1CdWlsdGlucy5jcHApCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRp
bnMuY3BwCisgICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtf
b2JqZWN0TmFtZX1CdWlsdGlucy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19idWlsdGlu
U291cmNlfQorICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9Cisg
ICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJ
UFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91
dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7X2J1aWx0aW5T
b3VyY2V9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1
aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQogZW5k
Zm9yZWFjaCAoKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgpCi1saXN0KEFQUEVO
RCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5F
UkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwKQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7
V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9CisgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisgICAg
ICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5o
CisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJDb3JlX0JVSUxUSU5TX1NP
VVJDRVN9CiAgICAgREVQRU5EUyAke0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQogICAgIENP
TU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLWZyYW1ld29yayBXZWJDb3JlIC0t
b3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtXZWJDb3Jl
X0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFUSU0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVf
REVSSVZFRF9TT1VSQ0VTICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9KQorbGlzdChBUFBF
TkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L1dlYkNvcmVKU0J1aWx0aW5zLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VS
Q0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2Vi
Q29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKIAogQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQ
RU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBNYXRoTUxO
YW1lcy5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGE5YWJiNWVlOTYz
NGU2ZWUwMDU0MTQwYThhMDIwMWMwNjUxNDY2ZTcuLjQ1ZGYyNmFhZDNiYzQ2MDE4YWYyZjIxOWU0
NTcyZjJkODAyMzcyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTMxOSwx
NiArMTMxOSwxOCBAQCBCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAogIyBBZGRpbmcv
cmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dlciByZWdlbmVyYXRpb24sIGJ1dCBjaGFuZ2lu
ZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJhdGVkIHNob3VsZCBub3QgYWZmZWN0IG90aGVy
IGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0tY29tYmluZWQnIHRvIHRoZSBnZW5lcmF0b3Iu
Ci0jIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJU1QgPSAkKHNoZWxsIGVjaG8gJChXZWJDb3Jl
X0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAncHJpbnQgIiAiIC4gam9pbigiIC1JIiwgc3Bs
aXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9yY2UKIFdlYkNvcmVfQlVJTFRJTlNfREVQRU5E
RU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRhdGVDb250ZW50
cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRh
dGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyknICRACiAKK1dlYkNv
cmVfQlVJTFRJTlNfV1JBUFBFUiA6IFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJD
b3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKQogCislQnVpbHRpbnMuaDogJS5qcyAkKEJV
SUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKSBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19M
SVNUCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5IC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3JrIFdlYkNvcmUgJDwK
IAotYWxsIDogV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAorYWxsIDogJChub3Rk
aXIgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVM6JS5qcz0lQnVpbHRpbnMuaCkpIFdlYkNvcmVf
QlVJTFRJTlNfV1JBUFBFUgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDE0NDhkYzcyYTZm
YzlmM2JkOGIyY2RhMTY2NDBmMjQ4MTIxOGI4Mi4uMzg5MTUzZTZlYjFlODhiOTE4ZjIwZGQ3Nzgx
NTZkM2YyNzc1MDZlMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA3LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBydW4tYnVpbHRpbnMtZ2VuZXJhdG9yLXRlc3RzIHNo
b3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFwcGVyIHdpdGggbW9yZSB0
aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVyIHRvIGdlbmVyYXRlIFdl
YkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBhbGwgV2ViQ29yZSB2YWxpZCBzZXBhcmF0ZSBm
aWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5OgorICAg
ICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKTog
UGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxlcyB0byB0aGUgc2NyaXB0LgorICAgICAgICAo
QnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvclRlc3Rz
LnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygc2luZ2xl
IGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMud3Jh
cHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIFdlYkNvcmUg
d3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JU
ZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5lIHRvIHJ1biBhIHRlc3QgaW4gcmVzZXQgbW9k
ZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMu
cnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2ViQ29yZSB3cmFwcGVycyBidWlsdGluIGdlbmVy
YXRpb24gdGVzdC4KKwogMjAxNi0wNy0xOSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dpbl0gVGhlIHRlc3QgZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ct
c2Nyb2xsLXBhc3QtbWF4Lmh0bWwgaXMgdGltaW5nIG91dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b2RlZ2VuL21haW4ucHkKaW5kZXggY2I4ODRkMWE1Y2JhZTIyNzgyY2M0MDA4Nzc4ODVmM2FlYTdj
MjM2Ni4uZDFkZDI2YjZiZjM1M2JmZDdkZDhlOWExZWYxNmQ3ZmVjMGFhNGFkYiAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQnVp
bHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRf
cmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdl
bmVyYXRlX2Zyb21fanNfYnVpbHRpbnMoc2VsZiwgYnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVj
dG9yeSwgZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJpbmVkX291dHB1dHM9RmFsc2UsIGdlbmVyYXRl
X3dyYXBwZXI9RmFsc2UpOgorICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYs
IGJ1aWx0aW5zX2ZpbGVzLCBvdXRwdXRfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT0iIiwgY29t
YmluZWRfb3V0cHV0cz1GYWxzZSwgZ2VuZXJhdGVfd3JhcHBlcnM9RmFsc2UpOgogICAgICAgICBj
bWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAgICAnSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9n
ZW5lcmF0ZS1qcy1idWlsdGlucy5weScsCiAgICAgICAgICAgICAgICAnLS1vdXRwdXQtZGlyZWN0
b3J5Jywgb3V0cHV0X2RpcmVjdG9yeSwKQEAgLTQ4LDE2ICs0OCwxNSBAQCBjbGFzcyBCdWlsdGlu
c0dlbmVyYXRvclRlc3RzOgogICAgICAgICBpZiBjb21iaW5lZF9vdXRwdXRzOgogICAgICAgICAg
ICAgY21kLmFwcGVuZCgnLS1jb21iaW5lZCcpCiAKLSAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBl
cjoKKyAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcnM6CiAgICAgICAgICAgICBjbWQuYXBwZW5k
KCctLXdyYXBwZXJzJykKIAotICAgICAgICBjbWQuYXBwZW5kKGJ1aWx0aW5zX2ZpbGUpCi0KKyAg
ICAgICAgY21kLmV4dGVuZChidWlsdGluc19maWxlcykKICAgICAgICAgZXhpdF9jb2RlID0gMAog
ICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUu
cnVuX2NvbW1hbmQoY21kKQogICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKLSAgICAgICAg
ICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoYnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVj
dG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2Zp
bGUoZnJhbWV3b3JrX25hbWUgKyAiLVdyYXBwZXJzIiBpZiBnZW5lcmF0ZV93cmFwcGVycyBlbHNl
IGJ1aWx0aW5zX2ZpbGVzWzBdLCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJfb3V0cHV0KQogICAg
ICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CiAgICAgICAgICAgICBwcmludCBlLm91dHB1dAog
ICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKQEAgLTkzLDM3ICs5Miw2MSBAQCBj
bGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgICAgIHByaW50ICdQQVNT
OiAlcycgJSBvdXRwdXRfZmlsZQogICAgICAgICByZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAg
ZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3Rvcnkp
OgorICAgIGRlZiBzaW5nbGVfYnVpbHRpbl90ZXN0KHNlbGYsIHRlc3RfbmFtZSwgdGVzdF9maWxl
cywgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAoZnJhbWV3b3JrX25hbWUsIHRlc3RfY2FzZSwg
b3V0cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0KCctJykKKyAgICAgICAgaWYgbm90IGZyYW1l
d29ya19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBvciBub3QgdGVzdF9jYXNlOgorICAgICAgICAg
ICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5hbWU6IHNob3VsZCBiZSBGcmFtZXdvcmstVGVz
dENhc2VOYW1lLU91dHB1dE1vZGUuanMiCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0X21vZGUgPT0gIkNvbWJpbmVkIgorICAgICAg
ICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHRlc3RfZmlsZXMsIHdvcmtf
ZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwgY29tYmluZWRfb3V0cHV0
cz1jb21iaW5lZF9vdXRwdXRzKQorCisgICAgZGVmIHdyYXBwZXJzX2J1aWx0aW5fdGVzdChzZWxm
LCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyh0ZXN0X2ZpbGVzLCB3b3JrX2RpcmVjdG9y
eSwgZnJhbWV3b3JrX25hbWU9IldlYkNvcmUiLCBnZW5lcmF0ZV93cmFwcGVycz1UcnVlKQorCisg
ICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHJlZmVyZW5jZV9kaXJlY3RvcnksIHRlc3RfbmFtZSwgdGVz
dF9maWxlcywgZ2VuZXJhdGVfYnVpbHRpbik6CisgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAg
ICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUg
Z2l2ZW4gb25lIG9yIGEgdGVtcCBvbmUgaWYgcmVzZXRfcmVzdWx0cyBpcyBub3QgcGVyZm9ybWVk
KQogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkKKyAgICAgICAg
aWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0g
dGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgaWYgZ2VuZXJhdGVfYnVpbHRpbih0ZXN0X25h
bWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJlc3VsdCA9IEZh
bHNlCiAKKyAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgorICAgICAgICAgICAgcHJpbnQg
IlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAlICh0ZXN0X25hbWUpCisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKKyAgICAgICAgaWYgc2VsZi5k
ZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAg
ICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBzaHV0aWwucm10cmVlKHdvcmtfZGlyZWN0
b3J5KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlu
cHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CiAgICAgICAgIHBhc3NlZCA9IFRy
dWUKKyAgICAgICAgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXMgPSBbXQogICAgICAgICBmb3Ig
aW5wdXRfZmlsZSBpbiBvcy5saXN0ZGlyKGlucHV0X2RpcmVjdG9yeSk6CiAgICAgICAgICAgICAo
dGVzdF9uYW1lLCBleHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dChpbnB1dF9maWxlKQogICAg
ICAgICAgICAgaWYgZXh0ZW5zaW9uICE9ICcuanMnOgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0gICAgICAgICAgICAjIEdlbmVyYXRlIG91dHB1dCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSAo
ZWl0aGVyIHRoZSBnaXZlbiBvbmUgb3IgYQotICAgICAgICAgICAgIyB0ZW1wIG9uZSBpZiBub3Qg
cmVzZXRfcmVzdWx0cyBpcyBwZXJmb3JtZWQpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNl
dF9yZXN1bHRzOgotICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtk
dGVtcCgpCi0KLSAgICAgICAgICAgIChmcmFtZXdvcmtfbmFtZSwgdGVzdF9jYXNlLCBvdXRwdXRf
bW9kZSkgPSB0ZXN0X25hbWUuc3BsaXQoJy0nKQotICAgICAgICAgICAgaWYgbm90IGZyYW1ld29y
a19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBvciBub3QgdGVzdF9jYXNlOgotICAgICAgICAgICAg
ICAgIHByaW50ICJJbnZhbGlkIHRlc3QgY2FzZSBuYW1lOiBzaG91bGQgYmUgRnJhbWV3b3JrLVRl
c3RDYXNlTmFtZS1PdXRwdXRNb2RlLmpzIgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAg
ICAgICAgICAgIGNvbWJpbmVkX291dHB1dHMgPSBvdXRwdXRfbW9kZSA9PSAiQ29tYmluZWQiCi0g
ICAgICAgICAgICBnZW5lcmF0ZV93cmFwcGVyID0gZnJhbWV3b3JrX25hbWUgPT0gIldlYkNvcmUi
Ci0gICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNfYnVpbHRpbnMob3MucGF0aC5q
b2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdv
cmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwgY29tYmluZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRz
LCBnZW5lcmF0ZV93cmFwcGVyPWdlbmVyYXRlX3dyYXBwZXIpOgorICAgICAgICAgICAgdGVzdF9m
aWxlID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSkKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0KHJlZmVyZW5jZV9kaXJlY3RvcnksIHRlc3RfbmFtZSwg
W3Rlc3RfZmlsZV0sIHNlbGYuc2luZ2xlX2J1aWx0aW5fdGVzdCk6CiAgICAgICAgICAgICAgICAg
cGFzc2VkID0gRmFsc2UKIAorICAgICAgICAgICAgIyBGSVhNRTogQWRkIEVycm9yIHBhcmFtZXRl
ciBpbiBmaWxlbmFtZSBhbmQgZmlsdGVyIG91dCB0aGVzZSBmaWxlcyBoZXJlLgorICAgICAgICAg
ICAgaWYgJ1NlcGFyYXRlJyBpbiB0ZXN0X25hbWUgYW5kICdXZWJDb3JlJyBpbiB0ZXN0X25hbWUg
YW5kIG5vdCAnRHVwbGljYXRlJyBpbiB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgc2VwYXJh
dGVseV9nZW5lcmF0ZWRfZmlsZXMuYXBwZW5kKHRlc3RfZmlsZSkKKwogICAgICAgICAgICAgaWYg
c2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAgICAgICAgIHByaW50ICJSZXNldCByZXN1bHRz
IGZvciB0ZXN0OiAlcyIgJSAoaW5wdXRfZmlsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQog
Ci0gICAgICAgICAgICAjIERldGVjdCBjaGFuZ2VzCi0gICAgICAgICAgICBpZiBzZWxmLmRldGVj
dF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAg
aWYgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5y
dW5fdGVzdChyZWZlcmVuY2VfZGlyZWN0b3J5LCAiV2ViQ29yZS1XcmFwcGVycyIsIHNlcGFyYXRl
bHlfZ2VuZXJhdGVkX2ZpbGVzLCBzZWxmLndyYXBwZXJzX2J1aWx0aW5fdGVzdCk6CiAgICAgICAg
ICAgICAgICAgcGFzc2VkID0gRmFsc2UKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod29ya19k
aXJlY3RvcnkpCiAKICAgICAgICAgcmV0dXJuIHBhc3NlZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284014</attachid>
            <date>2016-07-19 09:44:36 -0700</date>
            <delta_ts>2016-07-19 13:13:42 -0700</delta_ts>
            <desc>Fixing CMake build</desc>
            <filename>bug-159921-20160719184338.patch</filename>
            <type>text/plain</type>
            <size>78952</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjY5NmI0NTkxYjlhOWI5MmJmODVjNTAyODJhMGUwOTcwNDg4MGMyLi4wYTg5YmJlZjkyOTM5NDk2
MmMwYTdhMzY4MThhYTM5NjY4NTlkNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNi0wNy0xOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBi
dWlsdC1pbiBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb25seSB3cmFwcGVyIGZpbGVzIHdoZW4gcGFz
c2VkIHRoZS0td3JhcHBlciBvcHRpb24uCisgICAgICAgIFVwZGF0aW5nIHRoZSBidWlsdGluIGdl
bmVyYXRvciB0ZXN0IHJ1bm5lciwgYSBuZXcgZmlsZSBXZWJDb3JlLVdyYXBwZXJzLXJlc3VsdCBp
cyBnZW5lcmF0ZWQgYmFzZWQgb24gYWxsIHZhbGlkCisgICAgICAgIFdlYkNvcmUgc2VwYXJhdGUg
dGVzdCBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHk6
CisgICAgICAgIChjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKTogQ29tcHV0ZSBhIGRlY2Vu
dCBuYW1lIGZvciB3cmFwcGVyIGZpbGVzIGluIGNhc2Ugb2YgdGVzdCBtb2RlLgorICAgICAgICAo
Z2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKTogV2hlbiAtLXdyYXBwZXJzIGlz
IGFjdGl2YXRlZCwgdGhpcyBub3cgZ2VuZXJhdGVzIG9ubHkgdGhlIHdyYXBwZXIgZmlsZXMsIG5v
dCB0aGUgaW5kaXZpZHVhbCBmaWxlcy4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1y
ZXN1bHQ6IFJlbW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVp
bHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6
IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDogRGl0dG8uCisgICAg
ICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1
aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtV3JhcHBlcnMtcmVzdWx0OiBBZGRlZCwgY29udGFp
bnMgd3JhcHBlciBjb2RlIGZvciBhbGwgV2ViQ29yZSB2YWxpZCB0ZXN0IGNhc2VzLgorICAgICAg
ICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0
LVNlcGFyYXRlLmpzLXJlc3VsdDogUmVtb3ZlZCB3cmFwcGVyIGNvZGUuCisKIDIwMTYtMDctMTgg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGJ1
aWx0aW4gVHlwZUVycm9ycyBjb25zaXN0ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2ZmQ5YWM4YWIwN2U4
NWExNWMzMjI2YTgyNDRiYTI2Mjg1MWNjYi4uZjAxMjgzMzM0MmI5Yjc2OTI2MzJkODlkYjNmMDFj
NDgyYmQyY2FkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDE2LTA3LTE5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBydW4tYnVpbHRpbnMtZ2Vu
ZXJhdG9yLXRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFw
cGVyIHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGFuZCByZWJhc2Vk
IGJ1aWx0aW4gdGVzdHMuCisKKyAgICAgICAgVXBkYXRpbmcgYnVpbHQgc3lzdGVtIGFjY29yZGlu
ZyAtLS13cmFwcGVyIG5ldyBtZWFuaW5nLgorICAgICAgICBidWlsdGluIGdlbmVyYXRvciBpcyBu
b3cgY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1bGEgYnVpbHQtaW4gZmlsZSBwbHVzIG9uY2UgZm9y
IFdlYkNvcmUgd3JhcHBlciBmaWxlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisKKzIwMTYtMDctMTkgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgorCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gTWFrZSBSZWFkYWJs
ZVN0cmVhbSBwcm9wZXJ0aWVzIG5vdCBlbnVtZXJhYmxlCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQppbmRleCBkOWU3YzE1
MGVkYTBmM2ZmMzg2NTYyMzQ1OWU2MjZlNDNiZTFhOTFmLi43YjhmNzg0Yjk0NTljYThkYThiNDJh
MWNmYmY0NTgxZGZlMWFhZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQpAQCAtNDEsNiArNDEsMTAgQEAgaW1wb3J0
IGJ1aWx0aW5zCiBmcm9tIGJ1aWx0aW5zIGltcG9ydCAqCiAKIAorZGVmIGNvbmNhdGVuYXRlZF9v
dXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV93
cmFwcGVyX2ZpbGVzKToKKyAgICByZXR1cm4gZnJhbWV3b3JrX25hbWUgKyAnLVdyYXBwZXJzLXJl
c3VsdCcgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlcyBlbHNlIG9zLnBhdGguYmFzZW5hbWUoYnVp
bHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCisKKwogZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zv
cl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNlLApAQCAtNzEs
MTYgKzc1LDE2IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVp
bHRpbnNfZmlsZXM9W10sCiAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zQ29tYmlu
ZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAgICAgZWxzZToKICAgICAgICAgbG9n
LmRlYnVnKCJVc2luZyBnZW5lcmF0b3Igc3R5bGU6IHNpbmdsZSBmaWxlcyBmb3IgZWFjaCBidWls
dGluLiIpCi0gICAgICAgIGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0czoKLSAgICAgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zU2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IobW9kZWws
IG9iamVjdCkpCi0gICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRl
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCi0KICAgICAgICAgaWYgZ2Vu
ZXJhdGVfd3JhcHBlcl9maWxlczoKICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0
aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkpCiAgICAgICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChCdWlsdGluc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAK
ICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhl
YWRlckdlbmVyYXRvcihtb2RlbCkpCiAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWls
dGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBmb3Igb2JqZWN0IGluIG1vZGVsLm9iamVjdHM6CisgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUhlYWRlckdlbmVy
YXRvcihtb2RlbCwgb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChC
dWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCiAK
ICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9nLmRlYnVnKCJHZW5lcmF0aW5nIGJpbmRpbmdzIGZv
ciBidWlsdGlucy4iKQpAQCAtMTA3LDkgKzExMSw5IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19m
b3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICBvdXRwdXRf
ZmlsZS5jbG9zZSgpCiAKICAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6Ci0gICAgICAgIGZpbGVu
YW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsg
Jy1yZXN1bHQnKQorICAgICAgICBmaWxlbmFtZSA9IGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5h
bWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVz
KQogICAgICAgICBvdXRwdXRfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIGZp
bGVuYW1lKQotICAgICAgICBsb2cuZGVidWcoIldyaXRpbmcgZmlsZTogJXMiICUgb3V0cHV0X2Zp
bGVwYXRoKSAKKyAgICAgICAgbG9nLmRlYnVnKCJXcml0aW5nIGZpbGU6ICVzIiAlIG91dHB1dF9m
aWxlcGF0aCkKICAgICAgICAgb3V0cHV0X2ZpbGUgPSBMYXp5RmlsZVdyaXRlcihvdXRwdXRfZmls
ZXBhdGgsIGZvcmNlX291dHB1dCkKICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJ1xuJy5qb2lu
KHRlc3RfcmVzdWx0X2ZpbGVfY29udGVudHMpKQogICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMt
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3Vs
dAppbmRleCA4ZTYyZjNhZmNlMDliMTdiMDYwM2I4OGU3MDUwM2M2MjM5MDQ2YjI1Li40ZDcwYThh
MTBjMWI0MWFmZmUxNmE0ZjQxNzQ4NDE2MjA1YTU3NjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0
cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRy
YXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE5NSwyMTkgKzE5NSwz
IEBAIFdFQkNPUkVfRk9SRUFDSF9BUkJJVFJBUllDT05ESVRJT05BTEdVQVJEX0JVSUxUSU5fQ09E
RShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KSB8fCBVU0UoQ0YpCiAKICMjIyBFbmQgRmlsZTogQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1
aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3Vh
cmRCdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgICAgICAsIG1fYXJiaXRyYXJ5Q29u
ZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkgfHwgVVNFKENGKQotICAgIHsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8
IFVTRShDRikKLSAgICBBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBh
cmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNv
bmRpdGlvbmFsR3VhcmRCdWlsdGluczsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgVVNFKENGKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi0gICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0
aW5zV3JhcHBlciBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
aAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlu
cyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xh
c3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlND
OjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYp
OwotCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
cy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQot
ICAgIDogbV92bSh2bSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9i
amVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAg
IGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9M
RU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5q
cy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9l
eHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCAy
MzdhMGI0MTExMjQ2YzVjNTk2ZmQ4MTU2YmVmYTgzZDlkNzZiNWZhLi4zZjgxMzI1MWE0MzhmMGQ4
MTdhZjcwYjJlMjdhOGIxNjA2OTUyZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGlu
LVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90
ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpz
LXJlc3VsdApAQCAtMTk1LDIxOSArMTk1LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURCVUlM
VElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVpbHRpbnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1
aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkKLSAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCi0jZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIHsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRCdWlsdGluQnVp
bHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9n
dWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAK
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
Ci0KLSNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTog
V2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgot
Ly8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50
aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmpl
Y3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9i
YWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6
OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpp
bml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7Ci0gICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Ci0g
ICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBX
VEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50
RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFs
QnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IGIwNDc2Y2I5OTFhMzc4NGQxZGRiNzkyNTFlYWRhNTY2
NTkzMWJlYzUuLjIyYWU1MWU3OWY0NjIxNGUxNzE4OTZmYTM1YTVjNTMwM2ZhZTg5NTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQv
V2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjI3
LDI0NyArMjI3LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJ
TFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5z
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRp
bkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygm
bV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgewotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSAgICAgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhw
b3J0TmFtZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfQotCi0jaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dy
YXBwZXImIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAiCi0jIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9W
TS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0Owot
Ci1jbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9pZCB2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBt
X2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFs
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWls
dGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6
Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgLCBt
X2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCi17Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIG1f
Z3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0jaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQotICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi5pbml0KGdsb2JhbE9i
amVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi0jaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKSBcCi0gICAgSlNET01H
bG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyggXAotICAgICAgICBjbGllbnREYXRhLmJ1
aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQ
cml2YXRlTmFtZSgpLCBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9u
LmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCi0gICAgV0VCQ09SRV9G
T1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xB
UkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGlj
R2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsK
LSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMv
YnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJl
c3VsdAppbmRleCAxZWM4ZjQ3MWZjZGQ5NWEzYWEyNGE1MjZhOWJlMDM1YzdkMThlMjJhLi42ZDY4
YWVhYTE5MGJjZWY4ZGY1ZjMxODg1NDAyZWZiMzQyZjc1M2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVu
Z3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVp
bHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4NiwyMTMgKzE4NiwzIEBAIFdFQkNPUkVfRk9S
RUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFU
T1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBFbmQgRmlsZTogVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5C
dWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpT
QnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotICAgICAg
ICAsIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiB1bmd1YXJkZWRCdWlsdGluQnVpbHRp
bnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQotCi1wcml2YXRlOgot
ICAgIEpTQzo6Vk0mIG1fdm07Ci0gICAgVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBt
X3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJVbmd1YXJkZWRCdWls
dGluQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYp
OwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0KLXByaXZhdGU6
Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBF
bmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVk
ZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
Ci0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6
OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkK
LXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQot
ICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJv
cGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5h
ZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xv
YmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS1XcmFwcGVycy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVdyYXBwZXJzLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NjE2ODQ2YjRiNWJhYzMwZDIxM2UzYTRjOGFjYTVjZWU1YTA3ZWUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1XcmFwcGVycy1yZXN1bHQKQEAgLTAsMCArMSwzMDcgQEAKKyMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmgiCisj
aW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlu
cy5oIgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlv
bnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENG
KQorICAgICAgICAsIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZtX3ZtKQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAg
ICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMo
Jm1fdm0pCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1feG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB7Cisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5C
dWlsdGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmV4
cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIH0KKworI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFs
R3VhcmRCdWlsdGluc1dyYXBwZXImIGFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygp
IHsgcmV0dXJuIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zOyB9CisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQorICAgIEd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnMoKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsgfQorI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFw
cGVyJiB1bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0
aW5CdWlsdGluczsgfQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0
QnVpbHRpbnNXcmFwcGVyJiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMoKSB7IHJldHVybiBtX3htbENh
c2luZ1Rlc3RCdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJp
dmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNF
KENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJp
dHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRCdWls
dGluQnVpbHRpbnNXcmFwcGVyIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFVuZ3VhcmRlZEJ1aWx0
aW5CdWlsdGluc1dyYXBwZXIgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7CisjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXIgbV94bWxDYXNp
bmdUZXN0QnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5jcHAiCisjaW5jbHVkZSAi
R3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zLmNwcCIKKyNpbmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3Bw
IgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0
aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMo
SlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rpb25zJiB4bWxDYXNpbmdUZXN0KCkgeyByZXR1cm4g
bV94bWxDYXNpbmdUZXN0OyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorCitwcml2
YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRlZEludGVybmFsQnVp
bHRpbjsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rpb25zIG1feG1sQ2FzaW5nVGVzdDsK
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorCisjIyMgQmVn
aW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIK
KworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTQnVpbHRpbkludGVybmFs
RnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKKyAgICA6
IG1fdm0odm0pCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV9ndWFyZGVkSW50ZXJu
YWxCdWlsdGluKG1fdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQorI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKK3sKK30KKwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZpc2l0b3IpOworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAg
bV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLmluaXQoZ2xvYmFsT2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
ICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQorCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEpTVk1DbGllbnRE
YXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGll
bnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRp
Y0dsb2JhbHNbXSA9IHsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisjZGVmaW5lIERFQ0xBUkVf
R0xPQkFMX1NUQVRJQyhuYW1lKSBcCisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3Bl
cnR5SW5mbyggXAorICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBndWFyZGVkSW50
ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRl
IHwgSlNDOjpSZWFkT25seSksCisgICAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJV
SUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKKyN1bmRl
ZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFt
ZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKKyAgICAg
ICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkueG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCku
bmFtZSMjUHJpdmF0ZU5hbWUoKSwgeG1sQ2FzaW5nVGVzdCgpLm1fIyNuYW1lIyNGdW5jdGlvbi5n
ZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9S
RUFDSF9YTUxDQVNJTkdURVNUX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9T
VEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIH07CisgICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CisgICAgVU5VU0VE
X1BBUkFNKGNsaWVudERhdGEpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggNzQ3MTZl
YTBhZjg0ZTdjMjJkNmU2ZjYwNDRhZDY3NDdhYjcwMGRkMy4uOWRhZTg5Nzc1YmJmMTEwNjQ2Nzk5
NmM0Mzc0MGI5YTQ4NjQwYTEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFy
YXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9i
dWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0
CkBAIC0yNzgsMjQ3ICsyNzgsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVTVF9CVUlM
VElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0
aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0m
IHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAg
ICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX3htbENh
c2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgWE1MQ2FzaW5nVGVz
dEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyByZXR1cm4gbV94bWxD
YXNpbmdUZXN0QnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXBy
aXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAg
WE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsKLSNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuaCIKLSNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01H
bG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0K
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0dXJuIG1feG1s
Q2FzaW5nVGVzdDsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0ZToK
LSAgICBKU0M6OlZNJiBtX3ZtOwotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxDYXNp
bmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7Ci0jZW5kaWYgLy8gRU5BQkxF
KFNUUkVBTVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxl
OiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNs
dWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgOiBtX3ZtKHZtKQotI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKLSAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOwotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LmluaXQoZ2xvYmFsT2Jq
ZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpH
bG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpIFwKLSAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCi0gICAgICAgIGNsaWVudERhdGEuYnVp
bHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1l
KCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnRE
ZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKLSAgICBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVT
VF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERF
Q0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9
OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggM2Q3NTY2MWU5ZDg0OWViOTllNzAwNzUxYzYxNDA3ZGVjMmI4NDBm
NS4uYTExNWYyNTY2OGQ3MWVkN2VhNjIwZTNlNDRhZGQ2NWEwNDcxN2M1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTM3NDYsMjEgKzM3NDYsMzAgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9T
Q1JJUFRTCiAKIGZvcmVhY2ggKF9idWlsdGluU291cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VS
Q0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5T
b3VyY2V9IE5BTUVfV0UpCi0gICAgbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJ
TlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMu
aCkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5jcHApCisgICAgYWRk
X2N1c3RvbV9jb21tYW5kKAorICAgICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuY3BwCisgICAgICAgICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oCisgICAgICAg
IE1BSU5fREVQRU5ERU5DWSAke19idWlsdGluU291cmNlfQorICAgICAgICBERVBFTkRTICR7QlVJ
TFRJTlNfR0VORVJBVE9SX1NDUklQVFN9CisgICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VU
QUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMu
cHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9ICR7X2J1aWx0aW5Tb3VyY2V9CisgICAgICAgIFZFUkJBVElNKQorICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtf
b2JqZWN0TmFtZX1CdWlsdGlucy5oKQogZW5kZm9yZWFjaCAoKQotbGlzdChBUFBFTkQgV2ViQ29y
ZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNv
cmVKU0J1aWx0aW5zLmgpCi1saXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
KQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwKQogCiBhZGRfY3Vz
dG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9Cisg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlu
cy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuY3BwCisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oCisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKICAgICBNQUlOX0RFUEVO
REVOQ1kgJHtXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgREVQRU5EUyAke0JVSUxUSU5T
X0dFTkVSQVRPUl9TQ1JJUFRTfQogICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFw
cGVycyAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0gJHtXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFU
SU0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7V2ViQ29yZV9HRU5F
UkFURURfQlVJTFRJTlN9KQorbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmNwcCkKK2xpc3Qo
QVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVf
REVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNC
dWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKIAogQURE
X1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwv
SFRNTFRyZWVCdWlsZGVyLmNwcCBNYXRoTUxOYW1lcy5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IGE5YWJiNWVlOTYzNGU2ZWUwMDU0MTQwYThhMDIwMWMwNjUxNDY2ZTcu
LjQ1ZGYyNmFhZDNiYzQ2MDE4YWYyZjIxOWU0NTcyZjJkODAyMzcyNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQpAQCAtMTMxOSwxNiArMTMxOSwxOCBAQCBCVUlMVElOU19HRU5FUkFU
T1JfU0NSSVBUUyA9IFwKIAogIyBBZGRpbmcvcmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dl
ciByZWdlbmVyYXRpb24sIGJ1dCBjaGFuZ2luZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJh
dGVkIHNob3VsZCBub3QgYWZmZWN0IG90aGVyIGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0t
Y29tYmluZWQnIHRvIHRoZSBnZW5lcmF0b3IuCi0jIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJ
U1QgPSAkKHNoZWxsIGVjaG8gJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAn
cHJpbnQgIiAiIC4gam9pbigiIC1JIiwgc3BsaXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9y
Y2UKIFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSKS9VcGRhdGVDb250ZW50cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRhdGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5F
UkFUT1JfU0NSSVBUUyknICRACiAKK1dlYkNvcmVfQlVJTFRJTlNfV1JBUFBFUiA6IFdlYkNvcmVf
QlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1k
aXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJDb3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VT
KQogCislQnVpbHRpbnMuaDogJS5qcyAkKEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKSBXZWJD
b3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19MSVNUCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IC0tb3V0cHV0LWRpcmVjdG9y
eSAuIC0tZnJhbWV3b3JrIFdlYkNvcmUgJDwKIAotYWxsIDogV2ViQ29yZV9CVUlMVElOU19ERVBF
TkRFTkNJRVNfTElTVAorYWxsIDogJChub3RkaXIgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVM6
JS5qcz0lQnVpbHRpbnMuaCkpIFdlYkNvcmVfQlVJTFRJTlNfV1JBUFBFUgogCiAjIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZDE0NDhkYzcyYTZmYzlmM2JkOGIyY2RhMTY2NDBmMjQ4MTIxOGI4Mi4u
Mzg5MTUzZTZlYjFlODhiOTE4ZjIwZGQ3NzgxNTZkM2YyNzc1MDZlMyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2
LTA3LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBydW4t
YnVpbHRpbnMtZ2VuZXJhdG9yLXRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBi
dWlsdGlucyB3cmFwcGVyIHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9y
IHRlc3QgcnVubmVyIHRvIGdlbmVyYXRlIFdlYkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBh
bGwgV2ViQ29yZSB2YWxpZCBzZXBhcmF0ZSBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29kZWdlbi9tYWluLnB5OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5n
ZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKTogUGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxl
cyB0byB0aGUgc2NyaXB0LgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAg
ICAgIChCdWlsdGluc0dlbmVyYXRvclRlc3RzLnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0
byBoYW5kbGUgdGhlIGNhc2Ugb2Ygc2luZ2xlIGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAg
KEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMud3JhcHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8g
aGFuZGxlIHRoZSBjYXNlIG9mIFdlYkNvcmUgd3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgor
ICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5l
IHRvIHJ1biBhIHRlc3QgaW4gcmVzZXQgbW9kZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAg
ICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMucnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2Vi
Q29yZSB3cmFwcGVycyBidWlsdGluIGdlbmVyYXRpb24gdGVzdC4KKwogMjAxNi0wNy0xOSAgUGVy
IEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gVGhlIHRl
c3QgZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xsLXBhc3QtbWF4Lmh0bWwgaXMgdGltaW5n
IG91dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKaW5kZXggY2I4ODRkMWE1
Y2JhZTIyNzgyY2M0MDA4Nzc4ODVmM2FlYTdjMjM2Ni4uZDFkZDI2YjZiZjM1M2JmZDdkZDhlOWEx
ZWYxNmQ3ZmVjMGFhNGFkYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2Rl
Z2VuL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkK
QEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAg
c2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2
ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNfYnVpbHRpbnMoc2VsZiwg
YnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJp
bmVkX291dHB1dHM9RmFsc2UsIGdlbmVyYXRlX3dyYXBwZXI9RmFsc2UpOgorICAgIGRlZiBnZW5l
cmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0aW5zX2ZpbGVzLCBvdXRwdXRfZGlyZWN0
b3J5LCBmcmFtZXdvcmtfbmFtZT0iIiwgY29tYmluZWRfb3V0cHV0cz1GYWxzZSwgZ2VuZXJhdGVf
d3JhcHBlcnM9RmFsc2UpOgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAg
ICAnSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weScsCiAgICAg
ICAgICAgICAgICAnLS1vdXRwdXQtZGlyZWN0b3J5Jywgb3V0cHV0X2RpcmVjdG9yeSwKQEAgLTQ4
LDE2ICs0OCwxNSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICBpZiBj
b21iaW5lZF9vdXRwdXRzOgogICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1jb21iaW5lZCcpCiAK
LSAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcjoKKyAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBl
cnM6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXdyYXBwZXJzJykKIAotICAgICAgICBjbWQu
YXBwZW5kKGJ1aWx0aW5zX2ZpbGUpCi0KKyAgICAgICAgY21kLmV4dGVuZChidWlsdGluc19maWxl
cykKICAgICAgICAgZXhpdF9jb2RlID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGRl
cnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQogICAgICAgICAgICAg
aWYgc3RkZXJyX291dHB1dDoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUo
YnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAg
ICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoZnJhbWV3b3JrX25hbWUgKyAiLVdyYXBwZXJz
IiBpZiBnZW5lcmF0ZV93cmFwcGVycyBlbHNlIGJ1aWx0aW5zX2ZpbGVzWzBdLCBvdXRwdXRfZGly
ZWN0b3J5LCBzdGRlcnJfb3V0cHV0KQogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CiAg
ICAgICAgICAgICBwcmludCBlLm91dHB1dAogICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0
X2NvZGUKQEAgLTkzLDM3ICs5Miw2MSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgog
ICAgICAgICAgICAgICAgIHByaW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQogICAgICAgICBy
ZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgIGRlZiBzaW5nbGVfYnVpbHRpbl90ZXN0
KHNlbGYsIHRlc3RfbmFtZSwgdGVzdF9maWxlcywgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAo
ZnJhbWV3b3JrX25hbWUsIHRlc3RfY2FzZSwgb3V0cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0
KCctJykKKyAgICAgICAgaWYgbm90IGZyYW1ld29ya19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBv
ciBub3QgdGVzdF9jYXNlOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5h
bWU6IHNob3VsZCBiZSBGcmFtZXdvcmstVGVzdENhc2VOYW1lLU91dHB1dE1vZGUuanMiCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0
X21vZGUgPT0gIkNvbWJpbmVkIgorICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9mcm9tX2pz
X2J1aWx0aW5zKHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFt
ZXdvcmtfbmFtZSwgY29tYmluZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRzKQorCisgICAgZGVm
IHdyYXBwZXJzX2J1aWx0aW5fdGVzdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtf
ZGlyZWN0b3J5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlu
cyh0ZXN0X2ZpbGVzLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IldlYkNvcmUiLCBn
ZW5lcmF0ZV93cmFwcGVycz1UcnVlKQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHJlZmVyZW5j
ZV9kaXJlY3RvcnksIHRlc3RfbmFtZSwgdGVzdF9maWxlcywgZ2VuZXJhdGVfYnVpbHRpbik6Cisg
ICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUg
d29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEgdGVtcCBvbmUgaWYgcmVz
ZXRfcmVzdWx0cyBpcyBub3QgcGVyZm9ybWVkKQogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJl
ZmVyZW5jZV9kaXJlY3RvcnkKKyAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAg
ICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAg
aWYgZ2VuZXJhdGVfYnVpbHRpbih0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5
KToKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCiAKKyAgICAgICAgaWYgc2VsZi5yZXNldF9y
ZXN1bHRzOgorICAgICAgICAgICAgcHJpbnQgIlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAl
ICh0ZXN0X25hbWUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgRGV0ZWN0
IGNoYW5nZXMKKyAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwg
cmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAg
ICBzaHV0aWwucm10cmVlKHdvcmtfZGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gcmVzdWx0CisK
KyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVj
dG9yeSk6CiAgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgc2VwYXJhdGVseV9nZW5lcmF0
ZWRfZmlsZXMgPSBbXQogICAgICAgICBmb3IgaW5wdXRfZmlsZSBpbiBvcy5saXN0ZGlyKGlucHV0
X2RpcmVjdG9yeSk6CiAgICAgICAgICAgICAodGVzdF9uYW1lLCBleHRlbnNpb24pID0gb3MucGF0
aC5zcGxpdGV4dChpbnB1dF9maWxlKQogICAgICAgICAgICAgaWYgZXh0ZW5zaW9uICE9ICcuanMn
OgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAjIEdlbmVyYXRlIG91dHB1
dCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSAoZWl0aGVyIHRoZSBnaXZlbiBvbmUgb3IgYQotICAg
ICAgICAgICAgIyB0ZW1wIG9uZSBpZiBub3QgcmVzZXRfcmVzdWx0cyBpcyBwZXJmb3JtZWQpCi0g
ICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRzOgotICAgICAgICAgICAgICAgIHdv
cmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCi0KLSAgICAgICAgICAgIChmcmFtZXdv
cmtfbmFtZSwgdGVzdF9jYXNlLCBvdXRwdXRfbW9kZSkgPSB0ZXN0X25hbWUuc3BsaXQoJy0nKQot
ICAgICAgICAgICAgaWYgbm90IGZyYW1ld29ya19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBvciBu
b3QgdGVzdF9jYXNlOgotICAgICAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIHRlc3QgY2FzZSBu
YW1lOiBzaG91bGQgYmUgRnJhbWV3b3JrLVRlc3RDYXNlTmFtZS1PdXRwdXRNb2RlLmpzIgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGNvbWJpbmVkX291dHB1dHMgPSBv
dXRwdXRfbW9kZSA9PSAiQ29tYmluZWQiCi0gICAgICAgICAgICBnZW5lcmF0ZV93cmFwcGVyID0g
ZnJhbWV3b3JrX25hbWUgPT0gIldlYkNvcmUiCi0gICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRl
X2Zyb21fanNfYnVpbHRpbnMob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmls
ZSksIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwgY29tYmlu
ZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRzLCBnZW5lcmF0ZV93cmFwcGVyPWdlbmVyYXRlX3dy
YXBwZXIpOgorICAgICAgICAgICAgdGVzdF9maWxlID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVj
dG9yeSwgaW5wdXRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0KHJlZmVy
ZW5jZV9kaXJlY3RvcnksIHRlc3RfbmFtZSwgW3Rlc3RfZmlsZV0sIHNlbGYuc2luZ2xlX2J1aWx0
aW5fdGVzdCk6CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKIAorICAgICAgICAgICAg
IyBGSVhNRTogQWRkIEVycm9yIHBhcmFtZXRlciBpbiBmaWxlbmFtZSBhbmQgZmlsdGVyIG91dCB0
aGVzZSBmaWxlcyBoZXJlLgorICAgICAgICAgICAgaWYgJ1NlcGFyYXRlJyBpbiB0ZXN0X25hbWUg
YW5kICdXZWJDb3JlJyBpbiB0ZXN0X25hbWUgYW5kIG5vdCAnRHVwbGljYXRlJyBpbiB0ZXN0X25h
bWU6CisgICAgICAgICAgICAgICAgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXMuYXBwZW5kKHRl
c3RfZmlsZSkKKwogICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAg
ICAgICAgIHByaW50ICJSZXNldCByZXN1bHRzIGZvciB0ZXN0OiAlcyIgJSAoaW5wdXRfZmlsZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAjIERldGVjdCBjaGFuZ2Vz
Ci0gICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCByZWZl
cmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgaWYgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXM6
CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5fdGVzdChyZWZlcmVuY2VfZGlyZWN0b3J5LCAi
V2ViQ29yZS1XcmFwcGVycyIsIHNlcGFyYXRlbHlfZ2VuZXJhdGVkX2ZpbGVzLCBzZWxmLndyYXBw
ZXJzX2J1aWx0aW5fdGVzdCk6CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKLSAgICAg
ICAgICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCiAKICAgICAgICAgcmV0dXJuIHBh
c3NlZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284036</attachid>
            <date>2016-07-19 13:13:51 -0700</date>
            <delta_ts>2016-07-20 07:18:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159921-20160719221252.patch</filename>
            <type>text/plain</type>
            <size>79304</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjY5NmI0NTkxYjlhOWI5MmJmODVjNTAyODJhMGUwOTcwNDg4MGMyLi41NDUwZjQ2OGIzNDMzNTc5
ODFmYTFjZmFkYWYyNjI2MGFiYzY2NzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxNi0wNy0xOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBi
dWlsdC1pbiBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb25seSB3cmFwcGVyIGZpbGVzIHdoZW4gcGFz
c2VkIHRoZSAtLXdyYXBwZXJzIG9wdGlvbi4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGJ1aWx0
aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIFdlYkNvcmUtV3Jh
cHBlcnMuaC1yZXN1bHQgZ2VuZXJhdGVkIGZvciBhbGwKKyAgICAgICAgV2ViQ29yZSB0ZXN0IGZp
bGVzLCBsaWtlIHVzZWQgZm9yIHJlYWwgaW4gV2ViQ29yZS4KKyAgICAgICAgUHJldmlvdXNseSB3
cmFwcGVyIGNvZGUgd2FzIGdlbmVyYXRlZCBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggV2ViQ29yZSB0
ZXN0IGZpbGUuCisKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ogor
ICAgICAgICAoY29uY2F0ZW5hdGVkX291dHB1dF9maWxlbmFtZSk6IENvbXB1dGUgYSBkZWNlbnQg
bmFtZSBmb3Igd3JhcHBlciBmaWxlcyBpbiBjYXNlIG9mIHRlc3QgbW9kZS4KKyAgICAgICAgKGdl
bmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyk6IFdoZW4gLS13cmFwcGVycyBpcyBh
Y3RpdmF0ZWQsIHRoaXMgZ2VuZXJhdGVzIG9ubHkgdGhlIHdyYXBwZXIgZmlsZXMsIG5vdCB0aGUg
aW5kaXZpZHVhbCBmaWxlcy4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQ6
IFJlbW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFy
ZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdDogRGl0dG8uCisgICAgICAgICog
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4t
U2VwYXJhdGUuanMtcmVzdWx0OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0
aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQ6IFJl
bW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZUpTQnVpbHRpbnMuaC1yZXN1bHQ6IEFkZGVkLCBjb250YWlucyB3cmFwcGVy
IGNvZGUgZm9yIGFsbCBXZWJDb3JlIHZhbGlkIHRlc3QgY2FzZXMuCisKIDIwMTYtMDctMTggIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGJ1aWx0
aW4gVHlwZUVycm9ycyBjb25zaXN0ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2ZmQ5YWM4YWIwN2U4NWEx
NWMzMjI2YTgyNDRiYTI2Mjg1MWNjYi4uNWIwNzM5NzAyOTZmMDkyNzg2ZGE2MDFkNzZkYjM1NzUw
ZjBiYzU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDE2LTA3LTE5ICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBydW4tYnVpbHRpbnMtZ2VuZXJh
dG9yLXRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFwcGVy
IHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGFuZCByZWJhc2VkIGJ1
aWx0aW4gdGVzdHMuCisKKyAgICAgICAgVXBkYXRpbmcgYnVpbHQgc3lzdGVtIGFjY29yZGluZyAt
LS13cmFwcGVycyBuZXcgbWVhbmluZy4KKyAgICAgICAgYnVpbHRpbiBnZW5lcmF0b3IgaXMgbm93
IGNhbGxlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIGJ1aWx0LWluIGZpbGUgcGx1cyBvbmNlIGZvciBX
ZWJDb3JlIHdyYXBwZXIgZmlsZXMuCisgICAgICAgIFdlYkNvcmUgd3JhcHBlciBmaWxlcyBhbGxv
dyBoYW5kbGluZyBjdGhpbmdzIGxpa2UgY29uZGl0aW9uYWxseSBndWFyZGVkIGZlYXR1cmVzLgor
ICAgICAgICBUaGV5IGFsc28gcmVtb3ZlIHRoZSBuZWVkIHRvIHVzZSBidWlsdC1pbnMgbWFjcm9z
IG91dHNpZGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisyMDE2LTA3LTE5ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBbU3RyZWFtcyBBUEldIE1ha2UgUmVhZGFi
bGVTdHJlYW0gcHJvcGVydGllcyBub3QgZW51bWVyYWJsZQogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODY4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKaW5kZXggZDllN2Mx
NTBlZGEwZjNmZjM4NjU2MjM0NTllNjI2ZTQzYmUxYTkxZi4uMzY1ZGVkNjI1NzAyOWI1M2EyYjVi
Mjc3N2ZkZTU4N2M5OGY1NGZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKQEAgLTQxLDYgKzQxLDEyIEBAIGltcG9y
dCBidWlsdGlucwogZnJvbSBidWlsdGlucyBpbXBvcnQgKgogCiAKK2RlZiBjb25jYXRlbmF0ZWRf
b3V0cHV0X2ZpbGVuYW1lKGJ1aWx0aW5zX2ZpbGVzLCBmcmFtZXdvcmtfbmFtZSwgZ2VuZXJhdGVf
d3JhcHBlcl9maWxlcyk6CisgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlczoKKyAgICAgICAg
cmV0dXJuIGZyYW1ld29ya19uYW1lICsgJ0pTQnVpbHRpbnMuaC1yZXN1bHQnCisgICAgcmV0dXJu
IG9zLnBhdGguYmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCisKKwogZGVm
IGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9u
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVf
b3V0cHV0PUZhbHNlLApAQCAtNzEsMTYgKzc3LDE2IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19m
b3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEJ1aWx0aW5zQ29tYmluZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAg
ICAgZWxzZToKICAgICAgICAgbG9nLmRlYnVnKCJVc2luZyBnZW5lcmF0b3Igc3R5bGU6IHNpbmds
ZSBmaWxlcyBmb3IgZWFjaCBidWlsdGluLiIpCi0gICAgICAgIGZvciBvYmplY3QgaW4gbW9kZWwu
b2JqZWN0czoKLSAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zU2VwYXJhdGVI
ZWFkZXJHZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCi0gICAgICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChCdWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVj
dCkpCi0KICAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlczoKICAgICAgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkpCiAg
ICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1dyYXBwZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihtb2RlbCkpCiAKICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0
aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkpCiAgICAgICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihtb2RlbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Igb2JqZWN0IGlu
IG1vZGVsLm9iamVjdHM6CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRp
bnNTZXBhcmF0ZUhlYWRlckdlbmVyYXRvcihtb2RlbCwgb2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IobW9kZWwsIG9iamVjdCkpCiAKICAgICBsb2cuZGVidWcoIiIpCiAgICAgbG9nLmRlYnVnKCJH
ZW5lcmF0aW5nIGJpbmRpbmdzIGZvciBidWlsdGlucy4iKQpAQCAtMTA3LDkgKzExMyw5IEBAIGRl
ZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10s
CiAgICAgICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgpCiAKICAgICBpZiBjb25jYXRlbmF0ZV9v
dXRwdXQ6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUo
YnVpbHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnKQorICAgICAgICBmaWxlbmFtZSA9IGNvbmNh
dGVuYXRlZF9vdXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBn
ZW5lcmF0ZV93cmFwcGVyX2ZpbGVzKQogICAgICAgICBvdXRwdXRfZmlsZXBhdGggPSBvcy5wYXRo
LmpvaW4ob3V0cHV0X3BhdGgsIGZpbGVuYW1lKQotICAgICAgICBsb2cuZGVidWcoIldyaXRpbmcg
ZmlsZTogJXMiICUgb3V0cHV0X2ZpbGVwYXRoKSAKKyAgICAgICAgbG9nLmRlYnVnKCJXcml0aW5n
IGZpbGU6ICVzIiAlIG91dHB1dF9maWxlcGF0aCkKICAgICAgICAgb3V0cHV0X2ZpbGUgPSBMYXp5
RmlsZVdyaXRlcihvdXRwdXRfZmlsZXBhdGgsIGZvcmNlX291dHB1dCkKICAgICAgICAgb3V0cHV0
X2ZpbGUud3JpdGUoJ1xuJy5qb2luKHRlc3RfcmVzdWx0X2ZpbGVfY29udGVudHMpKQogICAgICAg
ICBvdXRwdXRfZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlv
bmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCA4ZTYyZjNhZmNlMDliMTdiMDYwM2I4OGU3MDUw
M2M2MjM5MDQ2YjI1Li40ZDcwYThhMTBjMWI0MWFmZmUxNmE0ZjQxNzQ4NDE2MjA1YTU3NjBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9l
eHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4
cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1
bHQKQEAgLTE5NSwyMTkgKzE5NSwzIEBAIFdFQkNPUkVfRk9SRUFDSF9BUkJJVFJBUllDT05ESVRJ
T05BTEdVQVJEX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCiAKICMjIyBFbmQgRmlsZTogQXJiaXRy
YXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9y
Ci0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFy
Yml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewot
cHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAg
ICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAg
ICAgICAsIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgIHsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLSAgICBBcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkQnVpbHRpbnNXcmFwcGVyJiBhcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMoKSB7
IHJldHVybiBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsgfQotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0m
IG1fdm07Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi0gICAgQXJiaXRyYXJ5
Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zV3JhcHBlciBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3Vh
cmRCdWlsdGluczsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAK
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
Ci0KLSNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3BwIgotIyMj
IEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQg
ZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RP
TUdsb2JhbE9iamVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVi
bGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsK
LQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6
ZShKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBi
dWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3Qu
aCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90
VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRh
KTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2Jh
bHNbXSA9IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRp
Y0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9Q
QVJBTShjbGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBG
aWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFy
ZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFy
YXRlLmpzLXJlc3VsdAppbmRleCAyMzdhMGI0MTExMjQ2YzVjNTk2ZmQ4MTU2YmVmYTgzZDlkNzZi
NWZhLi4zZjgxMzI1MWE0MzhmMGQ4MTdhZjcwYjJlMjdhOGIxNjA2OTUyZjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9X
ZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJk
ZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMTk1LDIxOSArMTk1LDMgQEAgV0VCQ09S
RV9GT1JFQUNIX0dVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5F
UkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1
YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWls
dGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEJ1
aWx0aW5CdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVpbHRp
bnMoJm1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIHsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBw
ZXImIGd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRCdWlsdGluQnVp
bHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0gICAg
SlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1aWx0
aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQg
RmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVp
bHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5z
LmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBK
YXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhK
U0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6
Vk0mIG1fdm07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVz
IGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUg
PGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci19Ci0KLXZv
aWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZNQ2xp
ZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0u
Y2xpZW50RGF0YSk7Ci0gICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBz
dGF0aWNHbG9iYWxzW10gPSB7Ci0gICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xv
YmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAg
ICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dl
YkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IGIwNDc2Y2I5OTFh
Mzc4NGQxZGRiNzkyNTFlYWRhNTY2NTkzMWJlYzUuLjIyYWU1MWU3OWY0NjIxNGUxNzE4OTZmYTM1
YTVjNTMwM2ZhZTg5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1T
ZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFy
YXRlLmpzLXJlc3VsdApAQCAtMjI3LDI0NyArMjI3LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJE
RURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikK
ICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogR3VhcmRlZElu
dGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVp
bHRpbnMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBi
dWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBt
X3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGlucygmbV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgbV9ndWFyZGVkSW50ZXJu
YWxCdWlsdGluQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCi0gICAgfQotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cygpIHsgcmV0dXJuIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOyB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0j
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
c1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBG
aWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWls
dGlucy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8g
YnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5C
dWlsdGlucy5jcHAiCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEpTRE9NR2xvYmFsT2JqZWN0OwotCi1jbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpW
TSYpOwotCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0
aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0g
ICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW4oKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47IH0KLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5G
dW5jdGlvbnMgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOwotI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMg
Zm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLSNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgLCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKLSNlbmRp
ZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi17Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQotICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNpdCh2aXNpdG9y
KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgVU5VU0VEX1BBUkFNKHZpc2l0
b3IpOwotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIG1fZ3VhcmRlZEludGVybmFs
QnVpbHRpbi5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9
IHsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJ
QyhuYW1lKSBcCi0gICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyggXAot
ICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMoKS5ndWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBndWFyZGVkSW50ZXJuYWxCdWlsdGlu
KCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFk
T25seSksCi0gICAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJ
Tl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dM
T0JBTF9TVEFUSUMKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfTsKLSAgICBn
bG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVO
R1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci0jZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0j
IyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJD
b3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRC
dWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCAxZWM4ZjQ3MWZjZGQ5NWEzYWEyNGE1MjZh
OWJlMDM1YzdkMThlMjJhLi42ZDY4YWVhYTE5MGJjZWY4ZGY1ZjMxODg1NDAyZWZiMzQyZjc1M2E5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE4NiwyMTMg
KzE4NiwzIEBAIFdFQkNPUkVfRk9SRUFDSF9VTkdVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShE
RUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICMjIyBF
bmQgRmlsZTogVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
V2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVi
bGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAg
ICAgOiBtX3ZtKHZtKQotICAgICAgICAsIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCZtX3Zt
KQotICAgIHsKLSAgICB9Ci0KLSAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiB1
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWls
dGluczsgfQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0gICAgVW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zV3JhcHBlciBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNp
bmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJD
b3JlSlNCdWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBi
dWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUv
Vk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsK
LQotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlz
aXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9i
amVjdCYpOwotCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0m
IHZtKQotICAgIDogbV92bSh2bSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0
aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9
OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFy
YXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0
aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5k
ZXggNzQ3MTZlYTBhZjg0ZTdjMjJkNmU2ZjYwNDRhZDY3NDdhYjcwMGRkMy4uOWRhZTg5Nzc1YmJm
MTEwNjQ2Nzk5NmM0Mzc0MGI5YTQ4NjQwYTEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdU
ZXN0LVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUu
anMtcmVzdWx0CkBAIC0yNzgsMjQ3ICsyNzgsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5H
VEVTVF9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVp
bHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25z
KEpTQzo6Vk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgICAgICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAg
ICBtX3htbENhc2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOwotI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgWE1M
Q2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyByZXR1
cm4gbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCi0gICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciBtX3htbENhc2luZ1Rlc3RCdWls
dGluczsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAieG1s
Q2FzaW5nVGVzdEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMu
aCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6
OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGlu
aXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
LSAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0
dXJuIG1feG1sQ2FzaW5nVGVzdDsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQot
cHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAg
ICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMj
IEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1
IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2
YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCi0KLSNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
czo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgOiBtX3ZtKHZt
KQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQot
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLXsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOwot
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7
Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LmluaXQo
Z2xvYmFsT2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLSNpZiBFTkFC
TEUoU1RSRUFNU19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xvYmFs
T2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpIFwKLSAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCi0gICAgICAgIGNsaWVu
dERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5hbWUjI1By
aXZhdGVOYW1lKCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBK
U0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKLSAgICBXRUJDT1JFX0ZPUkVBQ0hfWE1M
Q0FTSU5HVEVTVF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQot
I3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2Jh
bHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShj
bGllbnREYXRhKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0
aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZUpTQnVpbHRpbnMu
aC1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNjg0NmI0YjViYWMzMGQyMTNlM2E0YzhhY2E1Y2VlNWEw
N2VlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0CkBAIC0wLDAg
KzEsMzA3IEBACisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICog
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRC
dWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRl
ICJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJVbmd1YXJkZWRC
dWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuaCIKKyNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNC
dWlsdGluRnVuY3Rpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlv
bnMoSlNDOjpWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpIHx8IFVTRShDRikKKyAgICAgICAgLCBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWls
dGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5z
KCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoJm1fdm0p
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1fdW5ndWFyZGVkQnVp
bHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgLCBt
X3htbENhc2luZ1Rlc3RCdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgeworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX3htbENhc2luZ1Rl
c3RCdWlsdGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyAgICB9CisKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICBBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBhcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkQnVpbHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlu
czsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRl
ZEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEludGVybmFs
QnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgVW5ndWFyZGVkQnVpbHRp
bkJ1aWx0aW5zV3JhcHBlciYgdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV91
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAg
WE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyBy
ZXR1cm4gbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpIHx8IFVTRShDRikKKyAgICBBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNX
cmFwcGVyIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zOworI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAg
ICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyAgICBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1fZ3VhcmRlZEludGVy
bmFsQnVpbHRpbkJ1aWx0aW5zOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBV
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5z
OworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbnNXcmFw
cGVyIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpT
QnVpbHRpbnMuaAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0
aW5zLnB5CisKKyNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuY3Bw
IgorI2luY2x1ZGUgIkd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1ZGUgIkd1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiVW5ndWFyZGVkQnVpbHRp
bkJ1aWx0aW5zLmNwcCIKKyNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuY3BwIgorIyMj
IEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQg
ZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgInhtbENh
c2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOworCisjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rp
b25zJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxC
dWlsdGluOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVz
dCgpIHsgcmV0dXJuIG1feG1sQ2FzaW5nVGVzdDsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKKworcHJpdmF0ZToKKyAgICBKU0M6OlZNJiBtX3ZtOworI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyBtX2d1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW47CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3ht
bENhc2luZ1Rlc3Q7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0
aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpW
TSYgdm0pCisgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1f
Z3VhcmRlZEludGVybmFsQnVpbHRpbihtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgLCBtX3htbENhc2luZ1Rlc3QobV92bSkK
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50
ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNpdCh2
aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQorICAgIG1feG1sQ2FzaW5nVGVzdC52aXNpdCh2aXNpdG9yKTsKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworfQorCit2b2lk
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi5pbml0KGds
b2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkKKyAgICBtX3htbENhc2luZ1Rlc3QuaW5pdChnbG9iYWxPYmplY3QpOworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAg
ICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KG1fdm0uY2xpZW50RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3Bl
cnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2Rl
ZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0
OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rp
b25zKCkuZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUo
KSwgZ3VhcmRlZEludGVybmFsQnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpT
Qzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9HVUFS
REVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9T
VEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNkZWZpbmUgREVDTEFSRV9HTE9C
QUxfU1RBVElDKG5hbWUpIFwKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJ
bmZvKCBcCisgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rl
c3RCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFt
ZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAg
ICBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVTVF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVD
TEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9OworICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0
aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykp
OworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggM2Q3NTY2MWU5
ZDg0OWViOTllNzAwNzUxYzYxNDA3ZGVjMmI4NDBmNS4uYTExNWYyNTY2OGQ3MWVkN2VhNjIwZTNl
NDRhZGQ2NWEwNDcxN2M1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTM3NDYsMjEgKzM3NDYs
MzAgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAKIGZvcmVhY2ggKF9idWlsdGlu
U291cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29t
cG9uZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuaCkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2Jq
ZWN0TmFtZX1CdWlsdGlucy5jcHApCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRp
bnMuY3BwCisgICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtf
b2JqZWN0TmFtZX1CdWlsdGlucy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19idWlsdGlu
U291cmNlfQorICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9Cisg
ICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJ
UFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91
dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7X2J1aWx0aW5T
b3VyY2V9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1
aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQogZW5k
Zm9yZWFjaCAoKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgpCi1saXN0KEFQUEVO
RCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5F
UkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuY3BwKQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7
V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9CisgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisgICAg
ICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5o
CisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJDb3JlX0JVSUxUSU5TX1NP
VVJDRVN9CiAgICAgREVQRU5EUyAke0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQogICAgIENP
TU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLWZyYW1ld29yayBXZWJDb3JlIC0t
b3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtXZWJDb3Jl
X0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFUSU0pCi0KLWxpc3QoQVBQRU5EIFdlYkNvcmVf
REVSSVZFRF9TT1VSQ0VTICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9KQorbGlzdChBUFBF
TkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L1dlYkNvcmVKU0J1aWx0aW5zLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VS
Q0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBFTkQgV2Vi
Q29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKIAogQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQ
RU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBNYXRoTUxO
YW1lcy5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGE5YWJiNWVlOTYz
NGU2ZWUwMDU0MTQwYThhMDIwMWMwNjUxNDY2ZTcuLjQ1ZGYyNmFhZDNiYzQ2MDE4YWYyZjIxOWU0
NTcyZjJkODAyMzcyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTMxOSwx
NiArMTMxOSwxOCBAQCBCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAogIyBBZGRpbmcv
cmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dlciByZWdlbmVyYXRpb24sIGJ1dCBjaGFuZ2lu
ZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJhdGVkIHNob3VsZCBub3QgYWZmZWN0IG90aGVy
IGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0tY29tYmluZWQnIHRvIHRoZSBnZW5lcmF0b3Iu
Ci0jIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJU1QgPSAkKHNoZWxsIGVjaG8gJChXZWJDb3Jl
X0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAncHJpbnQgIiAiIC4gam9pbigiIC1JIiwgc3Bs
aXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9yY2UKIFdlYkNvcmVfQlVJTFRJTlNfREVQRU5E
RU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRhdGVDb250ZW50
cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRh
dGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyknICRACiAKK1dlYkNv
cmVfQlVJTFRJTlNfV1JBUFBFUiA6IFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29yayBXZWJD
b3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKQogCislQnVpbHRpbnMuaDogJS5qcyAkKEJV
SUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKSBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19M
SVNUCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5IC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3JrIFdlYkNvcmUgJDwK
IAotYWxsIDogV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAorYWxsIDogJChub3Rk
aXIgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVM6JS5qcz0lQnVpbHRpbnMuaCkpIFdlYkNvcmVf
QlVJTFRJTlNfV1JBUFBFUgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDE0NDhkYzcyYTZm
YzlmM2JkOGIyY2RhMTY2NDBmMjQ4MTIxOGI4Mi4uMzg5MTUzZTZlYjFlODhiOTE4ZjIwZGQ3Nzgx
NTZkM2YyNzc1MDZlMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA3LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBydW4tYnVpbHRpbnMtZ2VuZXJhdG9yLXRlc3RzIHNo
b3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFwcGVyIHdpdGggbW9yZSB0
aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVyIHRvIGdlbmVyYXRlIFdl
YkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBhbGwgV2ViQ29yZSB2YWxpZCBzZXBhcmF0ZSBm
aWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5OgorICAg
ICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKTog
UGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxlcyB0byB0aGUgc2NyaXB0LgorICAgICAgICAo
QnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRvclRlc3Rz
LnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Ygc2luZ2xl
IGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMud3Jh
cHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIFdlYkNvcmUg
d3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JU
ZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5lIHRvIHJ1biBhIHRlc3QgaW4gcmVzZXQgbW9k
ZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHMu
cnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2ViQ29yZSB3cmFwcGVycyBidWlsdGluIGdlbmVy
YXRpb24gdGVzdC4KKwogMjAxNi0wNy0xOSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dpbl0gVGhlIHRlc3QgZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ct
c2Nyb2xsLXBhc3QtbWF4Lmh0bWwgaXMgdGltaW5nIG91dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b2RlZ2VuL21haW4ucHkKaW5kZXggY2I4ODRkMWE1Y2JhZTIyNzgyY2M0MDA4Nzc4ODVmM2FlYTdj
MjM2Ni4uNGMxYjlmODg5MDg0NjU3YjNlMzEyMTU0MzY2YTQ2Mzg2ODY5Y2IxZSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQnVp
bHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRf
cmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdl
bmVyYXRlX2Zyb21fanNfYnVpbHRpbnMoc2VsZiwgYnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVj
dG9yeSwgZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJpbmVkX291dHB1dHM9RmFsc2UsIGdlbmVyYXRl
X3dyYXBwZXI9RmFsc2UpOgorICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYs
IGJ1aWx0aW5zX2ZpbGVzLCBvdXRwdXRfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT0iIiwgY29t
YmluZWRfb3V0cHV0cz1GYWxzZSwgZ2VuZXJhdGVfd3JhcHBlcnM9RmFsc2UpOgogICAgICAgICBj
bWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAgICAnSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9n
ZW5lcmF0ZS1qcy1idWlsdGlucy5weScsCiAgICAgICAgICAgICAgICAnLS1vdXRwdXQtZGlyZWN0
b3J5Jywgb3V0cHV0X2RpcmVjdG9yeSwKQEAgLTQ4LDE2ICs0OCwxNSBAQCBjbGFzcyBCdWlsdGlu
c0dlbmVyYXRvclRlc3RzOgogICAgICAgICBpZiBjb21iaW5lZF9vdXRwdXRzOgogICAgICAgICAg
ICAgY21kLmFwcGVuZCgnLS1jb21iaW5lZCcpCiAKLSAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBl
cjoKKyAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcnM6CiAgICAgICAgICAgICBjbWQuYXBwZW5k
KCctLXdyYXBwZXJzJykKIAotICAgICAgICBjbWQuYXBwZW5kKGJ1aWx0aW5zX2ZpbGUpCi0KKyAg
ICAgICAgY21kLmV4dGVuZChidWlsdGluc19maWxlcykKICAgICAgICAgZXhpdF9jb2RlID0gMAog
ICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUu
cnVuX2NvbW1hbmQoY21kKQogICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKLSAgICAgICAg
ICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoYnVpbHRpbnNfZmlsZSwgb3V0cHV0X2RpcmVj
dG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2Zp
bGUoZnJhbWV3b3JrX25hbWUgKyAiSlNCdWlsdGlucy5oLWVycm9yIiBpZiBnZW5lcmF0ZV93cmFw
cGVycyBlbHNlIGJ1aWx0aW5zX2ZpbGVzWzBdLCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJfb3V0
cHV0KQogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CiAgICAgICAgICAgICBwcmludCBl
Lm91dHB1dAogICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKQEAgLTkzLDM3ICs5
Miw2MSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgICAgIHBy
aW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQogICAgICAgICByZXR1cm4gY2hhbmdlc19mb3Vu
ZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgorICAgIGRlZiBzaW5nbGVfYnVpbHRpbl90ZXN0KHNlbGYsIHRlc3RfbmFtZSwg
dGVzdF9maWxlcywgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAoZnJhbWV3b3JrX25hbWUsIHRl
c3RfY2FzZSwgb3V0cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0KCctJykKKyAgICAgICAgaWYg
bm90IGZyYW1ld29ya19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBvciBub3QgdGVzdF9jYXNlOgor
ICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5hbWU6IHNob3VsZCBiZSBGcmFt
ZXdvcmstVGVzdENhc2VOYW1lLU91dHB1dE1vZGUuanMiCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0X21vZGUgPT0gIkNvbWJpbmVk
IgorICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHRlc3RfZmls
ZXMsIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFtZSwgY29tYmlu
ZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRzKQorCisgICAgZGVmIHdyYXBwZXJzX2J1aWx0aW5f
dGVzdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5KToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyh0ZXN0X2ZpbGVzLCB3b3Jr
X2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IldlYkNvcmUiLCBnZW5lcmF0ZV93cmFwcGVycz1U
cnVlKQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHJlZmVyZW5jZV9kaXJlY3RvcnksIHRlc3Rf
bmFtZSwgdGVzdF9maWxlcywgZ2VuZXJhdGVfYnVpbHRpbik6CisgICAgICAgIHJlc3VsdCA9IFRy
dWUKKyAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVp
dGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEgdGVtcCBvbmUgaWYgcmVzZXRfcmVzdWx0cyBpcyBub3Qg
cGVyZm9ybWVkKQogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkK
KyAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgIHdvcmtfZGly
ZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgiYnVpbHRpbi1nZW5lcmF0b3ItdGVzdHMiKQorCisg
ICAgICAgIGlmIGdlbmVyYXRlX2J1aWx0aW4odGVzdF9uYW1lLCB0ZXN0X2ZpbGVzLCB3b3JrX2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICByZXN1bHQgPSBGYWxzZQogCisgICAgICAgIGlmIHNlbGYu
cmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgIHByaW50ICJSZXNldCByZXN1bHRzIGZvciB0ZXN0
OiAlcyIgJSAodGVzdF9uYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAj
IERldGVjdCBjaGFuZ2VzCisgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UK
KyAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5j
ZV9kaXJlY3RvcnkpOgogICAgICAgICBwYXNzZWQgPSBUcnVlCisgICAgICAgIHNlcGFyYXRlbHlf
Z2VuZXJhdGVkX2ZpbGVzID0gW10KICAgICAgICAgZm9yIGlucHV0X2ZpbGUgaW4gb3MubGlzdGRp
cihpbnB1dF9kaXJlY3RvcnkpOgogICAgICAgICAgICAgKHRlc3RfbmFtZSwgZXh0ZW5zaW9uKSA9
IG9zLnBhdGguc3BsaXRleHQoaW5wdXRfZmlsZSkKICAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAh
PSAnLmpzJzoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgIyBHZW5lcmF0
ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9y
IGEKLSAgICAgICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVyZm9y
bWVkKQotICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKLSAgICAgICAgICAg
ICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotCi0gICAgICAgICAgICAo
ZnJhbWV3b3JrX25hbWUsIHRlc3RfY2FzZSwgb3V0cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0
KCctJykKLSAgICAgICAgICAgIGlmIG5vdCBmcmFtZXdvcmtfbmFtZSBvciBub3Qgb3V0cHV0X21v
ZGUgb3Igbm90IHRlc3RfY2FzZToKLSAgICAgICAgICAgICAgICBwcmludCAiSW52YWxpZCB0ZXN0
IGNhc2UgbmFtZTogc2hvdWxkIGJlIEZyYW1ld29yay1UZXN0Q2FzZU5hbWUtT3V0cHV0TW9kZS5q
cyIKLSAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBjb21iaW5lZF9vdXRw
dXRzID0gb3V0cHV0X21vZGUgPT0gIkNvbWJpbmVkIgotICAgICAgICAgICAgZ2VuZXJhdGVfd3Jh
cHBlciA9IGZyYW1ld29ya19uYW1lID09ICJXZWJDb3JlIgotICAgICAgICAgICAgaWYgc2VsZi5n
ZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlu
cHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUs
IGNvbWJpbmVkX291dHB1dHM9Y29tYmluZWRfb3V0cHV0cywgZ2VuZXJhdGVfd3JhcHBlcj1nZW5l
cmF0ZV93cmFwcGVyKToKKyAgICAgICAgICAgIHRlc3RfZmlsZSA9IG9zLnBhdGguam9pbihpbnB1
dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5fdGVz
dChyZWZlcmVuY2VfZGlyZWN0b3J5LCB0ZXN0X25hbWUsIFt0ZXN0X2ZpbGVdLCBzZWxmLnNpbmds
ZV9idWlsdGluX3Rlc3QpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCiAKKyAgICAg
ICAgICAgICMgRklYTUU6IEFkZCBFcnJvciBwYXJhbWV0ZXIgaW4gZmlsZW5hbWUgYW5kIGZpbHRl
ciBvdXQgdGhlc2UgZmlsZXMgaGVyZS4KKyAgICAgICAgICAgIGlmICdTZXBhcmF0ZScgaW4gdGVz
dF9uYW1lIGFuZCAnV2ViQ29yZScgaW4gdGVzdF9uYW1lIGFuZCBub3QgJ0R1cGxpY2F0ZScgaW4g
dGVzdF9uYW1lOgorICAgICAgICAgICAgICAgIHNlcGFyYXRlbHlfZ2VuZXJhdGVkX2ZpbGVzLmFw
cGVuZCh0ZXN0X2ZpbGUpCisKICAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKICAg
ICAgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlucHV0
X2ZpbGUpCiAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgIyBEZXRlY3Qg
Y2hhbmdlcwotICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9y
eSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIGlmIHNlcGFyYXRlbHlfZ2VuZXJhdGVk
X2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuX3Rlc3QocmVmZXJlbmNlX2RpcmVj
dG9yeSwgIldlYkNvcmVKU0J1aWx0aW5zLmgiLCBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlcywg
c2VsZi53cmFwcGVyc19idWlsdGluX3Rlc3QpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZh
bHNlCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHdvcmtfZGlyZWN0b3J5KQogCiAgICAgICAg
IHJldHVybiBwYXNzZWQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284103</attachid>
            <date>2016-07-20 07:18:56 -0700</date>
            <delta_ts>2016-07-21 13:05:00 -0700</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-159921-20160720161756.patch</filename>
            <type>text/plain</type>
            <size>94401</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZWRkMTAyNmQzZWQ4NjBhYmUyOTJiZmQyNzVjMzExNWUxOWM1ZmJhLi5jNzFjMWM0ZDVkYjg2YTc2
Y2I4NmY3YjQyMDlhNTE4YjEyZDEzYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNi0wNy0yMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBi
dWlsdC1pbiBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb25seSB3cmFwcGVyIGZpbGVzIHdoZW4gcGFz
c2VkIHRoZSAtLXdyYXBwZXJzIG9wdGlvbi4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGJ1aWx0
aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIFdlYkNvcmUtV3Jh
cHBlcnMuaC1yZXN1bHQgZ2VuZXJhdGVkIGZvciBhbGwKKyAgICAgICAgV2ViQ29yZSB0ZXN0IGZp
bGVzLCBsaWtlIHVzZWQgZm9yIHJlYWwgaW4gV2ViQ29yZS4KKyAgICAgICAgUHJldmlvdXNseSB3
cmFwcGVyIGNvZGUgd2FzIGdlbmVyYXRlZCBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggV2ViQ29yZSB0
ZXN0IGZpbGUuCisKKyAgICAgICAgQWRkZWQgbmV3IGJ1aWx0LWluIHRlc3QgZmlsZSB0byBjb3Zl
ciB0aGUgY2FzZSBvZiBzZXZlcmFsIGNvbmNhdGVuYXRpbmcgc2V2ZXJhbCBndWFyZHMgaW4gZ2Vu
ZXJhdGVkIFdlYkNvcmUgd3JhcHBlciBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJh
dGUtanMtYnVpbHRpbnMucHk6CisgICAgICAgIChjb25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1l
KTogQ29tcHV0ZSBhIGRlY2VudCBuYW1lIGZvciB3cmFwcGVyIGZpbGVzIGluIGNhc2Ugb2YgdGVz
dCBtb2RlLgorICAgICAgICAoZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKTog
V2hlbiAtLXdyYXBwZXJzIGlzIGFjdGl2YXRlZCwgdGhpcyBnZW5lcmF0ZXMgb25seSB0aGUgd3Jh
cHBlciBmaWxlcywgbm90IHRoZSBpbmRpdmlkdWFsIGZpbGVzLgorICAgICAgICAqIFNjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvV2ViQ29yZS1Bbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBh
cmF0ZS5qczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLUFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJD
b3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0OiBSZW1vdmVk
IHdyYXBwZXIgY29kZS4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtR3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OiBEaXR0by4KKyAgICAg
ICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVy
bmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRl
LmpzLXJlc3VsdDogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBl
Y3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0OiBSZW1vdmVkIHdy
YXBwZXIgY29kZS4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dl
YkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0OiBBZGRlZCwgY29udGFpbnMgd3JhcHBlciBjb2RlIGZv
ciBhbGwgV2ViQ29yZSB2YWxpZCB0ZXN0IGNhc2VzLgorCiAyMDE2LTA3LTE5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIGRlZmF1bHQgdGVzdGluZyBtb2Rl
IHNob3VsZCBub3QgaW52b2x2ZSBkaXNhYmxpbmcgdGhlIEZUTCBKSVQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBl
M2Q4YjEzZTU2OWE2NGRiY2NmZWJkMWQ3YzY2ZTE2YTQwZThjZDU5Li5kZjcxOTFmYzQ4YmJiZDlk
YTMwOGQ0NTkyNDNkZjVkZTc0MWJjMmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTYtMDctMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIHJ1
bi1idWlsdGlucy1nZW5lcmF0b3ItdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gdGVzdCBXZWJDb3Jl
IGJ1aWx0aW5zIHdyYXBwZXIgd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTkyMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgYW5k
IGFkZGVkIGJ1aWx0LWlucyB0ZXN0cy4KKworICAgICAgICBVcGRhdGluZyBidWlsdCBzeXN0ZW0g
YWNjb3JkaW5nIC0tLXdyYXBwZXJzIG5ldyBtZWFuaW5nLgorICAgICAgICBidWlsdGluIGdlbmVy
YXRvciBpcyBub3cgY2FsbGVkIGZvciBlYWNoIGluZGl2aWR1YWwgYnVpbHQtaW4gZmlsZSBwbHVz
IG9uY2UgZm9yIFdlYkNvcmUgd3JhcHBlciBmaWxlcy4KKyAgICAgICAgV2ViQ29yZSB3cmFwcGVy
IGZpbGVzIGFsbG93IGhhbmRsaW5nIGN0aGluZ3MgbGlrZSBjb25kaXRpb25hbGx5IGd1YXJkZWQg
ZmVhdHVyZXMuCisgICAgICAgIFRoZXkgYWxzbyByZW1vdmUgdGhlIG5lZWQgdG8gdXNlIGJ1aWx0
LWlucyBtYWNyb3Mgb3V0c2lkZSBnZW5lcmF0ZWQgY29kZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisKIDIwMTYtMDctMTkgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFtGZXRjaCBBUEldIEFk
ZCBhIEpTIGJ1aWx0aW4gdG8gaW1wbGVtZW50IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3Jn
LyNjb25jZXB0LWhlYWRlcnMtZmlsbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQppbmRleCBkOWU3YzE1MGVkYTBmM2ZmMzg2
NTYyMzQ1OWU2MjZlNDNiZTFhOTFmLi4zNjVkZWQ2MjU3MDI5YjUzYTJiNWIyNzc3ZmRlNTg3Yzk4
ZjU0ZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0
ZS1qcy1idWlsdGlucy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weQpAQCAtNDEsNiArNDEsMTIgQEAgaW1wb3J0IGJ1aWx0aW5zCiBm
cm9tIGJ1aWx0aW5zIGltcG9ydCAqCiAKIAorZGVmIGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5h
bWUoYnVpbHRpbnNfZmlsZXMsIGZyYW1ld29ya19uYW1lLCBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVz
KToKKyAgICBpZiBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVzOgorICAgICAgICByZXR1cm4gZnJhbWV3
b3JrX25hbWUgKyAnSlNCdWlsdGlucy5oLXJlc3VsdCcKKyAgICByZXR1cm4gb3MucGF0aC5iYXNl
bmFtZShidWlsdGluc19maWxlc1swXSkgKyAnLXJlc3VsdCcKKworCiBkZWYgZ2VuZXJhdGVfYmlu
ZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5zX2ZpbGVzPVtdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0aD1Ob25lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2Us
CkBAIC03MSwxNiArNzcsMTYgQEAgZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19m
aWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRp
bnNDb21iaW5lZEltcGxlbWVudGF0aW9uR2VuZXJhdG9yKG1vZGVsKSkKICAgICBlbHNlOgogICAg
ICAgICBsb2cuZGVidWcoIlVzaW5nIGdlbmVyYXRvciBzdHlsZTogc2luZ2xlIGZpbGVzIGZvciBl
YWNoIGJ1aWx0aW4uIikKLSAgICAgICAgZm9yIG9iamVjdCBpbiBtb2RlbC5vYmplY3RzOgotICAg
ICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUhlYWRlckdlbmVyYXRv
cihtb2RlbCwgb2JqZWN0KSkKLSAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5z
U2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCwgb2JqZWN0KSkKLQogICAgICAg
ICBpZiBnZW5lcmF0ZV93cmFwcGVyX2ZpbGVzOgogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQnVpbHRpbnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKG1vZGVsKSkKICAgICAgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKG1v
ZGVsKSkKIAogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNJbnRlcm5hbHNX
cmFwcGVySGVhZGVyR2VuZXJhdG9yKG1vZGVsKSkKICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKG1vZGVs
KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBvYmplY3QgaW4gbW9kZWwub2JqZWN0
czoKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSGVh
ZGVyR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEJ1aWx0aW5zU2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCwgb2Jq
ZWN0KSkKIAogICAgIGxvZy5kZWJ1ZygiIikKICAgICBsb2cuZGVidWcoIkdlbmVyYXRpbmcgYmlu
ZGluZ3MgZm9yIGJ1aWx0aW5zLiIpCkBAIC0xMDcsOSArMTEzLDkgQEAgZGVmIGdlbmVyYXRlX2Jp
bmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAg
IG91dHB1dF9maWxlLmNsb3NlKCkKIAogICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoKLSAgICAg
ICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5iYXNlbmFtZShidWlsdGluc19maWxl
c1swXSkgKyAnLXJlc3VsdCcpCisgICAgICAgIGZpbGVuYW1lID0gY29uY2F0ZW5hdGVkX291dHB1
dF9maWxlbmFtZShidWlsdGluc19maWxlcywgZnJhbWV3b3JrX25hbWUsIGdlbmVyYXRlX3dyYXBw
ZXJfZmlsZXMpCiAgICAgICAgIG91dHB1dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRf
cGF0aCwgZmlsZW5hbWUpCi0gICAgICAgIGxvZy5kZWJ1ZygiV3JpdGluZyBmaWxlOiAlcyIgJSBv
dXRwdXRfZmlsZXBhdGgpIAorICAgICAgICBsb2cuZGVidWcoIldyaXRpbmcgZmlsZTogJXMiICUg
b3V0cHV0X2ZpbGVwYXRoKQogICAgICAgICBvdXRwdXRfZmlsZSA9IExhenlGaWxlV3JpdGVyKG91
dHB1dF9maWxlcGF0aCwgZm9yY2Vfb3V0cHV0KQogICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgn
XG4nLmpvaW4odGVzdF9yZXN1bHRfZmlsZV9jb250ZW50cykpCiAgICAgICAgIG91dHB1dF9maWxl
LmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9XZWJDb3Jl
LUFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1
ZmFlM2ZlMjY3ZTJiZjg4YWYwZTgyMzg1NWIwMTdmZDIwYjVjZGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9XZWJDb3JlLUFu
b3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzCkBAIC0wLDAgKzEsMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBAY29uZGl0
aW9uYWw9RU5BQkxFKEZFVENIX0FQSSkKKy8vIEBpbnRlcm5hbAorCitmdW5jdGlvbiBsZXRzRmV0
Y2goKQoreworICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIEBmZXRjaFJlcXVlc3QobmV3
IEBSZXF1ZXN0KCJ5ZXMiKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFub3RoZXJHdWFyZGVkSW50
ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNGZkMDMwMTQwNDA2
YTA3NTBkNDEyYzM2OGE1ZDlmZTQ4ZmQ1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMCwwICsxLDIy
NyBAQAorIyMjIEJlZ2luIEZpbGU6IEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZFVENIX0FQ
SSkKKworI2luY2x1ZGUgPGJ1aWx0aW5zL0J1aWx0aW5VdGlscy5oPgorI2luY2x1ZGUgPGJ5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg+CisjaW5jbHVkZSA8cnVudGltZS9JZGVu
dGlmaWVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBK
U0MgeworY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8qIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluICovCitleHRlcm4gY29uc3QgY2hh
ciogc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkxldHNGZXRjaENvZGU7CitleHRlcm4g
Y29uc3QgaW50IHNfYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlTGVu
Z3RoOworZXh0ZXJuIGNvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Fub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29kZUNvbnN0cnVjdEFiaWxpdHk7CisKKyNkZWZpbmUg
V0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fREFU
QShtYWNybykgXAorICAgIG1hY3JvKGxldHNGZXRjaCwgYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1
aWx0aW5MZXRzRmV0Y2gsIDApIFwKKworI2RlZmluZSBXRUJDT1JFX0JVSUxUSU5fQU5PVEhFUkdV
QVJERURJTlRFUk5BTEJVSUxUSU5fTEVUU0ZFVENIIDEKKworI2RlZmluZSBXRUJDT1JFX0ZPUkVB
Q0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKG1hY3JvKSBcCisg
ICAgbWFjcm8oYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlLCBsZXRz
RmV0Y2gsIHNfYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlTGVuZ3Ro
KSBcCisKKyNkZWZpbmUgV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlM
VElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShtYWNybykgXAorICAgIG1hY3JvKGxldHNGZXRjaCkg
XAorCisjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9u
TmFtZSwgYXJndW1lbnRDb3VudCkgXAorICAgIEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlKiBjb2Rl
TmFtZSMjR2VuZXJhdG9yKEpTQzo6Vk0mKTsKKworV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFS
REVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fR0VORVJBVE9S
KQorI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IKKworY2xhc3MgQW5vdGhlckd1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgOiBwcml2YXRlIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBBbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zV3JhcHBlcihKU0M6OlZNKiB2bSkKKyAgICAgICAgOiBtX3ZtKCp2bSkKKyAg
ICAgICAgV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxU
SU5fRlVOQ1RJT05fTkFNRShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCisjZGVmaW5lIElOSVRJ
QUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIGxlbmd0aCkg
LCBtXyMjbmFtZSMjU291cmNlKEpTQzo6bWFrZVNvdXJjZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9t
TGl0ZXJhbChzXyMjbmFtZSwgbGVuZ3RoKSkpCisgICAgICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9U
SEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0NPREUoSU5JVElBTElaRV9CVUlMVElO
X1NPVVJDRV9NRU1CRVJTKQorI3VuZGVmIElOSVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVS
UworICAgIHsKKyAgICB9CisKKyNkZWZpbmUgRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMobmFt
ZSwgZnVuY3Rpb25OYW1lLCBsZW5ndGgpIFwKKyAgICBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBuYW1lIyNFeGVjdXRhYmxlKCk7IFwKKyAgICBjb25zdCBKU0M6OlNvdXJjZUNvZGUm
IG5hbWUjI1NvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fIyNuYW1lIyNTb3VyY2U7IH0KKyAgICBX
RUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RF
KEVYUE9TRV9CVUlMVElOX0VYRUNVVEFCTEVTKQorI3VuZGVmIEVYUE9TRV9CVUlMVElOX0VYRUNV
VEFCTEVTCisKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxU
SU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9JREVOVElGSUVSX0FDQ0VT
U09SKQorCisgICAgdm9pZCBleHBvcnROYW1lcygpOworCitwcml2YXRlOgorICAgIEpTQzo6Vk0m
IG1fdm07CisKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxU
SU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9OQU1FUykKKworI2RlZmlu
ZSBERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMobmFtZSwgZnVuY3Rpb25OYW1lLCBsZW5n
dGgpIFwKKyAgICBKU0M6OlNvdXJjZUNvZGUgbV8jI25hbWUjI1NvdXJjZTtcCisgICAgSlNDOjpX
ZWFrPEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fIyNuYW1lIyNFeGVjdXRhYmxl
OworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlM
VElOX0NPREUoREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQorI3VuZGVmIERFQ0xBUkVf
QlVJTFRJTl9TT1VSQ0VfTUVNQkVSUworCit9OworCisjZGVmaW5lIERFRklORV9CVUlMVElOX0VY
RUNVVEFCTEVTKG5hbWUsIGZ1bmN0aW9uTmFtZSwgbGVuZ3RoKSBcCitpbmxpbmUgSlNDOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWls
dGluc1dyYXBwZXI6Om5hbWUjI0V4ZWN1dGFibGUoKSBcCit7XAorICAgIGlmICghbV8jI25hbWUj
I0V4ZWN1dGFibGUpXAorICAgICAgICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IEpTQzo6V2VhazxK
U0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPihKU0M6OmNyZWF0ZUJ1aWx0aW5FeGVjdXRh
YmxlKG1fdm0sIG1fIyNuYW1lIyNTb3VyY2UsIGZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpLCBz
XyMjbmFtZSMjQ29uc3RydWN0QWJpbGl0eSksIHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7
XAorICAgIHJldHVybiBtXyMjbmFtZSMjRXhlY3V0YWJsZS5nZXQoKTtcCit9CitXRUJDT1JFX0ZP
UkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9C
VUlMVElOX0VYRUNVVEFCTEVTKQorI3VuZGVmIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTCisK
K2lubGluZSB2b2lkIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVy
OjpleHBvcnROYW1lcygpCit7CisjZGVmaW5lIEVYUE9SVF9GVU5DVElPTl9OQU1FKG5hbWUpIG1f
dm0ucHJvcGVydHlOYW1lcy0+YXBwZW5kRXh0ZXJuYWxOYW1lKG5hbWUjI1B1YmxpY05hbWUoKSwg
bmFtZSMjUHJpdmF0ZU5hbWUoKSk7CisgICAgV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVE
SU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShFWFBPUlRfRlVOQ1RJT05fTkFN
RSkKKyN1bmRlZiBFWFBPUlRfRlVOQ1RJT05fTkFNRQorfQorCitjbGFzcyBBbm90aGVyR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkgOiBtX3ZtKHZtKSB7IH0KKworICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7
CisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAgICBKU0M6
OlZNJiBtX3ZtOworCisjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhmdW5j
dGlvbk5hbWUpIFwKKyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1fIyNm
dW5jdGlvbk5hbWUjI0Z1bmN0aW9uOworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRF
RElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlMVElOX1NP
VVJDRV9NRU1CRVJTKQorI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUworfTsK
KworaW5saW5lIHZvaWQgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rp
b25zOjppbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyNkZWZpbmUg
RVhQT1JUX0ZVTkNUSU9OKGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIGxlbmd0aClcCisgICAgbV8j
I2Z1bmN0aW9uTmFtZSMjRnVuY3Rpb24uc2V0KG1fdm0sICZnbG9iYWxPYmplY3QsIEpTQzo6SlNG
dW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKG1fdm0sIGNvZGVOYW1lIyNHZW5lcmF0b3Io
bV92bSksICZnbG9iYWxPYmplY3QpKTsKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJE
RURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKEVYUE9SVF9GVU5DVElPTikKKyN1bmRlZiBF
WFBPUlRfRlVOQ1RJT04KK30KKworaW5saW5lIHZvaWQgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1
aWx0aW5CdWlsdGluRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworI2RlZmluZSBWSVNJVF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZCgmbV8jI25hbWUj
I0Z1bmN0aW9uKTsKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJV
SUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQorI3VuZGVmIFZJU0lU
X0ZVTkNUSU9OCit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEZFVENIX0FQSSkKKyMjIyBFbmQgRmlsZTogQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0
aW5CdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBBbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zLmNwcAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxl
cyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisKKyNpZiBF
TkFCTEUoRkVUQ0hfQVBJKQorCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhlY3V0YWJsZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50cmluc2lj
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDZWxsSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBKU0M6OkNvbnN0cnVjdEFiaWxpdHkgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkxldHNGZXRjaENvZGVDb25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3Q7Citjb25zdCBpbnQgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkxldHNGZXRjaENvZGVMZW5ndGggPSA4MjsKK3N0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBz
X2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29kZUludHJpbnNpYyA9IEpT
Qzo6Tm9JbnRyaW5zaWM7Citjb25zdCBjaGFyKiBzX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWls
dGluTGV0c0ZldGNoQ29kZSA9CisgICAgIihmdW5jdGlvbiAoKVxuIiBcCisgICAgIntcbiIgXAor
ICAgICIgICBcInVzZSBzdHJpY3RcIjtcbiIgXAorICAgICIgICAgcmV0dXJuIEBmZXRjaFJlcXVl
c3QobmV3IEBSZXF1ZXN0KFwieWVzXCIpKTtcbiIgXAorICAgICJ9KVxuIiBcCis7CisKKworI2Rl
ZmluZSBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgYXJn
dW1lbnRDb3VudCkgXAorSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0
b3IoSlNDOjpWTSYgdm0pIFwKK3tcCisgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOyBcCisgICAgcmV0dXJu
IGNsaWVudERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS5hbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zKCkuY29kZU5hbWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0
YS0+YnVpbHRpbkZ1bmN0aW9ucygpLmFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnMoKS5jb2RlTmFtZSMjU291cmNlKCksIE51bGxvcHQsIHNfIyNjb2RlTmFtZSMjSW50cmluc2lj
KTsgXAorfQorV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JV
SUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0JVSUxU
SU5fR0VORVJBVE9SCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEZFVENIX0FQSSkKKworIyMjIEVuZCBGaWxlOiBBbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5zLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Njcmlw
dHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkLVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1T
ZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggYzRhYzc4MmRhOTM2ZWY2ZDVmYzVhM2U1NTM1ZGM2OTdk
MGI4ZTYzYi4uNGQ3MGE4YTEwYzFiNDFhZmZlMTZhNGY0MTc0ODQxNjIwNWE1NzYwYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0
ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CkBA
IC0xOTUsMjIwICsxOTUsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfQVJCSVRSQVJZQ09ORElUSU9OQUxH
VUFSRF9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVO
QUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQogCiAjIyMgRW5kIEZpbGU6IEFyYml0cmFyeUNv
bmRpdGlvbmFsR3VhcmRCdWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8g
YnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgICAg
IDogbV92bSh2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLSAgICAgICAg
LCBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygmbV92bSkKLSNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLSAgICB7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi0gICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1
aWx0aW5zV3JhcHBlciYgYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCkgeyByZXR1
cm4gbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3Zt
OwotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgIEFyYml0cmFyeUNvbmRp
dGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVp
bHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0j
aW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQg
RmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVz
IGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9i
YWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAg
ICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNE
T01HbG9iYWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5J
bnRlcm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0j
aW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsK
LX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZvaWQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAg
IEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVy
dHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRT
dGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFs
cykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1
YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCA4ZDEzZDZhOGVjMDMwNWRlZGZj
OWJmYzk5ZDZjYzdlMDU1MTFiZmNlLi4zZjgxMzI1MWE0MzhmMGQ4MTdhZjcwYjJlMjdhOGIxNjA2
OTUyZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9i
dWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBl
Y3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMTk1LDIy
MCArMTk1LDMgQEAgV0VCQ09SRV9GT1JFQUNIX0dVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShE
RUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQog
CiAjIyMgRW5kIEZpbGU6IEd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewot
cHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAg
ICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1
YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgIHsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1
aWx0aW5CdWlsdGluc1dyYXBwZXImIGd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBt
X2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENh
bm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNj
cmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJHdWFy
ZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZp
c2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQotCi1w
cml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMgQmVnaW4g
RmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKLQot
I2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICA6IG1f
dm0odm0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAg
ICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9
IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2Jh
bHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShj
bGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBX
ZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50
ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVp
bHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggOWY0NjE2ZjczZDEyMGE0MGRjZGEwMzcyMjU3
NzBkMzBmYjRmNmQ3Yi4uMjJhZTUxZTc5ZjQ2MjE0ZTE3MTg5NmZhMzVhNWM1MzAzZmFlODk1MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMv
ZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBl
Y3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CkBA
IC0yMjcsMjUyICsyMjcsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJTFRJ
Tl9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICog
Q29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
KiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5z
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1
aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNC
dWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQotICAgICAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cy5leHBvcnROYW1lcygpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5zV3JhcHBlciYgZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9n
dWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlu
cy5weQotCi0jaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcCIKLSMj
IyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJD
b3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0
IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50
aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmpl
Y3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBl
eHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lk
IHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9i
YWxPYmplY3QmKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBHdWFyZGVkSW50ZXJu
YWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyYgZ3VhcmRlZEludGVybmFsQnVpbHRpbigpIHsgcmV0
dXJuIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbjsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKLQotcHJpdmF0ZToKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNDOjpWTSYg
bV92bTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0jaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRl
ZEludGVybmFsQnVpbHRpbjsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMg
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1
aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhK
U0M6OlZNJiB2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgOiBtX3ZtKHZtKQotI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAg
LCBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZp
c2l0b3IpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFSQU0o
dmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxp
emUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV9ndWFyZGVkSW50
ZXJuYWxCdWlsdGluLmluaXQoZ2xvYmFsT2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCi0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEp
OwotICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFs
c1tdID0gewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxf
U1RBVElDKG5hbWUpIFwKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZv
KCBcCi0gICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLmd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIGd1YXJkZWRJbnRlcm5hbEJ1
aWx0aW4oKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6
OlJlYWRPbmx5KSwKLSAgICBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9C
VUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xB
UkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9Owot
ICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJB
WV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsK
LSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3Vh
cmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IDllYTkyOGM4MDEwZjhiMGFlMTg2
MGRkOTJlYjcxMjRhNTA0MzNlODkuLjZkNjhhZWFhMTkwYmNlZjhkZjVmMzE4ODU0MDJlZmIzNDJm
NzUzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1
aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhw
ZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMTg2
LDIxNCArMTg2LDMgQEAgV0VCQ09SRV9GT1JFQUNIX1VOR1VBUkRFREJVSUxUSU5fQlVJTFRJTl9D
T0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
IyMjIEVuZCBGaWxlOiBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9W
TS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQot
ICAgICAgICA6IG1fdm0odm0pCi0gICAgICAgICwgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMo
Jm1fdm0pCi0gICAgewotICAgIH0KLQotICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBw
ZXImIHVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fdW5ndWFyZGVkQnVpbHRp
bkJ1aWx0aW5zOyB9Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSAgICBVbmd1YXJk
ZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCi0jIyMgRW5kIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
LS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8cnVu
dGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2Jq
ZWN0OwotCi1jbGFzcyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9p
ZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xv
YmFsT2JqZWN0Jik7Ci0KLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRl
IDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1K
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlND
OjpWTSYgdm0pCi0gICAgOiBtX3ZtKHZtKQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci19Ci0K
LXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZN
Q2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1f
dm0uY2xpZW50RGF0YSk7Ci0gICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5m
byBzdGF0aWNHbG9iYWxzW10gPSB7Ci0gICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGlj
R2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsK
LSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2lu
Z1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4IDRhMDBiZGZmMDU2ZGE5ZWZjZTIyNDU4OWEy
MWE5M2MwOWU4OGIxY2QuLjlkYWU4OTc3NWJiZjExMDY0Njc5OTZjNDM3NDBiOWE0ODY0MGExMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2Vi
Q29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjc4LDI1MiArMjc4LDMg
QEAgV0VCQ09SRV9GT1JFQUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJTl9DT0RFKERFRklORV9CVUlM
VElOX0dFTkVSQVRPUikKICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQg
RmlsZTogeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9y
Ci0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgInht
bENhc2luZ1Rlc3RCdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAg
IGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3Zt
KHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX3htbENhc2luZ1Rlc3RC
dWlsdGlucygmbV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgewotI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnMuZXhw
b3J0TmFtZXMoKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfQotCi0jaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXImIHht
bENhc2luZ1Rlc3RCdWlsdGlucygpIHsgcmV0dXJuIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zOyB9
Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0m
IG1fdm07Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIFhNTENhc2luZ1Rlc3RCdWlsdGlu
c1dyYXBwZXIgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJD
b3JlSlNCdWlsdGlucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMg
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkKLQotI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCi0jIyMg
RW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBm
aWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotCi1jbGFz
cyBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9pZCB2aXNpdChKU0M6
OlNsb3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5GdW5j
dGlvbnMmIHhtbENhc2luZ1Rlc3QoKSB7IHJldHVybiBtX3htbENhc2luZ1Rlc3Q7IH0KLSNlbmRp
ZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0jaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgIEpTQzo6Vk0mIG1fdm07Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9u
cyBtX3htbENhc2luZ1Rlc3Q7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5z
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1KU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMo
SlNDOjpWTSYgdm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIDogbV92bSh2bSkKLSNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAg
ICwgbV94bWxDYXNpbmdUZXN0KG1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQot
ewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5j
dGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQotICAgIG1feG1sQ2FzaW5nVGVzdC52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12
b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0j
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9i
amVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi0jaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCi0jZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKSBcCi0gICAgSlNET01H
bG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyggXAotICAgICAgICBjbGllbnREYXRhLmJ1
aWx0aW5GdW5jdGlvbnMoKS54bWxDYXNpbmdUZXN0QnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFt
ZSgpLCB4bWxDYXNpbmdUZXN0KCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250
RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCi0gICAgV0VCQ09SRV9GT1JFQUNIX1hNTENBU0lOR1RF
U1RfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBE
RUNMQVJFX0dMT0JBTF9TVEFUSUMKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAg
fTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZf
QVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0
YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBl
Y3RlZC9XZWJDb3JlSlNCdWlsdGlucy5oLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMxZjdkMTZkNzM4Y2NlNDJmZDRhOWUyZWE2MmY4NjlkZGI0ZmY4NmEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWls
dGlucy9leHBlY3RlZC9XZWJDb3JlSlNCdWlsdGlucy5oLXJlc3VsdApAQCAtMCwwICsxLDM0OSBA
QAorIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5zLmgiCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmgiCisj
aW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlu
cy5oIgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlv
bnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2
bSkKKyAgICAgICAgOiBtX3ZtKHZtKQorI2lmIEVOQUJMRShGRVRDSF9BUEkpCisgICAgICAgICwg
bV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8v
IEVOQUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisg
ICAgICAgICwgbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMoJm1fdm0pCisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgICAgICAsIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAs
IG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyAgICAgICAgLCBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92
bSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV94bWxDYXNpbmdUZXN0QnVp
bHRpbnMoJm1fdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIHsKKyNpZiBF
TkFCTEUoRkVUQ0hfQVBJKQorICAgICAgICBtX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGlu
QnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnMuZXhwb3J0TmFtZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX3htbENhc2luZ1Rlc3RCdWlsdGlucy5leHBv
cnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9CisKKyNpZiBF
TkFCTEUoRkVUQ0hfQVBJKQorICAgIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnNXcmFwcGVyJiBhbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1
cm4gbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8g
RU5BQkxFKEZFVENIX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAg
ICBBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBhcmJpdHJhcnlDb25k
aXRpb25hbEd1YXJkQnVpbHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3Vh
cmRCdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQor
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBl
ciYgZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1aWx0aW5CdWls
dGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgVW5ndWFy
ZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyBy
ZXR1cm4gbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0
aW5zKCkgeyByZXR1cm4gbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFC
TEUoRkVUQ0hfQVBJKQorICAgIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNX
cmFwcGVyIG1fYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAv
LyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQor
ICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJpdHJhcnlD
b25kaXRpb25hbEd1YXJkQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8
fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRCdWlsdGluQnVp
bHRpbnNXcmFwcGVyIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWls
dGluc1dyYXBwZXIgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7CisjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXIgbV94bWxDYXNpbmdUZXN0
QnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBK
YXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUg
IkFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1ZGUgIkFy
Yml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiR3VhcmRlZEJ1
aWx0aW5CdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5zLmNwcCIKKyNpbmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1
ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1
aWx0aW5zLmNwcAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5o
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5z
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpz
LWJ1aWx0aW5zLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQW5vdGhlckd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0
aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUds
b2JhbE9iamVjdDsKKworY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKwor
ICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShK
U0RPTUdsb2JhbE9iamVjdCYpOworCisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKyAgICBBbm90aGVy
R3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGFub3RoZXJHdWFyZGVkSW50
ZXJuYWxCdWlsdGluKCkgeyByZXR1cm4gbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbjsg
fQorI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQor
ICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zJiBndWFyZGVkSW50ZXJu
YWxCdWlsdGluKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOyB9CisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0dXJuIG1feG1s
Q2FzaW5nVGVzdDsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToK
KyNpZiBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgSlNDOjpW
TSYgbV92bTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19B
UEkpCisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKyAgICBBbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkJ1aWx0aW5GdW5jdGlvbnMgbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbjsKKyNl
bmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBH
dWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyBtX2d1YXJkZWRJbnRlcm5hbEJ1
aWx0aW47CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7
CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0
IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgi
CisKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCisjaWYg
RU5BQkxFKEZFVENIX0FQSSkgfHwgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIDogbV92bSh2bSkK
KyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYg
RU5BQkxFKEZFVENIX0FQSSkKKyAgICAsIG1fYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4o
bV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkKKyAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbihtX3ZtKQorI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgLCBtX3htbENhc2lu
Z1Rlc3QobV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit7CisgICAgVU5VU0VE
X1BBUkFNKHZtKTsKK30KKwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQo
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAg
IG1fYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4udmlzaXQodmlzaXRvcik7CisjZW5kaWYg
Ly8gRU5BQkxFKEZFVENIX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV9ndWFy
ZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdUZXN0LnZp
c2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6Omlu
aXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAgIG1fYW5vdGhl
ckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4uaW5pdChnbG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVO
QUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZElu
dGVybmFsQnVpbHRpbi5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX3htbENhc2luZ1Rlc3QuaW5p
dChnbG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworI2lmIEVO
QUJMRShGRVRDSF9BUEkpIHx8IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBKU1ZNQ2xpZW50RGF0
YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50
RGF0YSk7CisgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNH
bG9iYWxzW10gPSB7CisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKyNkZWZpbmUgREVDTEFSRV9HTE9C
QUxfU1RBVElDKG5hbWUpIFwKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJ
bmZvKCBcCisgICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLmFub3RoZXJHdWFy
ZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBhbm90aGVy
R3VhcmRlZEludGVybmFsQnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6
RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVS
R1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9C
QUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJM
RShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dM
T0JBTF9TVEFUSUMobmFtZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0
eUluZm8oIFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkuZ3VhcmRlZElu
dGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgZ3VhcmRlZEludGVy
bmFsQnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8
IEpTQzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9HVUFSREVESU5URVJOQUxCVUlM
VElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUp
IFwKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCisgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5h
bWUjI1ByaXZhdGVOYW1lKCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0
KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJDT1JFX0ZPUkVB
Q0hfWE1MQ0FTSU5HVEVTVF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RB
VElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICB9OworICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRp
Y0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9Q
QVJBTShjbGllbnREYXRhKTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUo
U1RSRUFNU19BUEkpCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggN2E2
NjFkNjM3OWVlMDRiYzlkYjk5ZmYxYjQwMDM5YzM2Yjc3ZmRmMy4uNjE3MGI4Zjg3ZmUyMDI0ZGRi
NzMyZGZlM2JmOWU4ZTM0ZmNhMDU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTM3NDcsMjEg
KzM3NDcsMzAgQEAgc2V0KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAKIGZvcmVhY2ggKF9i
dWlsdGluU291cmNlICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5h
bWVfY29tcG9uZW50KF9vYmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuaCkKLSAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
JHtfb2JqZWN0TmFtZX1CdWlsdGlucy5jcHApCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAg
ICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9
QnVpbHRpbnMuY3BwCisgICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19i
dWlsdGluU291cmNlfQorICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQ
VFN9CisgICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29y
ZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2ViQ29y
ZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7X2J1
aWx0aW5Tb3VyY2V9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
REVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3RO
YW1lfUJ1aWx0aW5zLmNwcCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNF
UyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5o
KQogZW5kZm9yZWFjaCAoKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgpCi1saXN0
KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oKQotbGlzdChBUFBFTkQgV2ViQ29y
ZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwKQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VU
UFVUICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9CisgICAgT1VUUFVUICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHAKKyAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3Bw
CisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWls
dGlucy5oCisgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJDb3JlX0JVSUxU
SU5TX1NPVVJDRVN9CiAgICAgREVQRU5EUyAke0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQog
ICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRT
X0RJUn0vZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLWZyYW1ld29yayBXZWJD
b3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtX
ZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAgICAgVkVSQkFUSU0pCi0KLWxpc3QoQVBQRU5EIFdl
YkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7V2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlN9KQorbGlz
dChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmNwcCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oKQorbGlzdChBUFBF
TkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCkKIAogQUREX1NPVVJDRV9XRUJDT1JFX0RFUklW
RURfREVQRU5ERU5DSUVTKCR7V0VCQ09SRV9ESVJ9L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcCBN
YXRoTUxOYW1lcy5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDlkNDg5
ZTI4MTE5ODhhNTFmZGM4N2JhZTYzMmNiYjUwMjA0NDk2YWYuLjFmZDg4OWJkYzkyYTFiZDE0ZmIw
ZGUwZTdjZTkwYzk4MDI4MDczYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MTMyMCwxNiArMTMyMCwxOCBAQCBCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAogIyBB
ZGRpbmcvcmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dlciByZWdlbmVyYXRpb24sIGJ1dCBj
aGFuZ2luZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJhdGVkIHNob3VsZCBub3QgYWZmZWN0
IG90aGVyIGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0tY29tYmluZWQnIHRvIHRoZSBnZW5l
cmF0b3IuCi0jIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJU1QgPSAkKHNoZWxsIGVjaG8gJChX
ZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAncHJpbnQgIiAiIC4gam9pbigiIC1J
Iiwgc3BsaXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9yY2UKIFdlYkNvcmVfQlVJTFRJTlNf
REVQRU5ERU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRhdGVD
b250ZW50cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElS
KS9VcGRhdGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyknICRACiAK
K1dlYkNvcmVfQlVJTFRJTlNfV1JBUFBFUiA6IFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVT
X0xJU1QKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29y
ayBXZWJDb3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKQogCislQnVpbHRpbnMuaDogJS5q
cyAkKEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTKSBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVO
Q0lFU19MSVNUCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5IC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3JrIFdlYkNv
cmUgJDwKIAotYWxsIDogV2ViQ29yZV9CVUlMVElOU19ERVBFTkRFTkNJRVNfTElTVAorYWxsIDog
JChub3RkaXIgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVM6JS5qcz0lQnVpbHRpbnMuaCkpIFdl
YkNvcmVfQlVJTFRJTlNfV1JBUFBFUgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDYyNzdl
MzE1YjljZjU5Y2ZmNDgwY2QwODM4OGRiYjMzNGM4YjdhMS4uYjI1MmI5MDVjNmY5YzczODA0ZmE5
OWE2MjNlZTg0ZWIxM2JlZTE3NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA3LTIwICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBydW4tYnVpbHRpbnMtZ2VuZXJhdG9yLXRl
c3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFwcGVyIHdpdGgg
bW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVyIHRvIGdlbmVy
YXRlIFdlYkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBhbGwgV2ViQ29yZSB2YWxpZCBzZXBh
cmF0ZSBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5
OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0
aW5zKTogUGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxlcyB0byB0aGUgc2NyaXB0LgorICAg
ICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChCdWlsdGluc0dlbmVyYXRv
clRlc3RzLnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugb2Yg
c2luZ2xlIGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9yVGVz
dHMud3JhcHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIFdl
YkNvcmUgd3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgorICAgICAgICAoQnVpbHRpbnNHZW5l
cmF0b3JUZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5lIHRvIHJ1biBhIHRlc3QgaW4gcmVz
ZXQgbW9kZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAgICAgKEJ1aWx0aW5zR2VuZXJhdG9y
VGVzdHMucnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2ViQ29yZSB3cmFwcGVycyBidWlsdGlu
IGdlbmVyYXRpb24gdGVzdC4KKwogMjAxNi0wNy0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIFRoZSBkZWZhdWx0IHRlc3RpbmcgbW9kZSBzaG91bGQgbm90IGlu
dm9sdmUgZGlzYWJsaW5nIHRoZSBGVEwgSklUCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvZGVnZW4vbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9t
YWluLnB5CmluZGV4IGNiODg0ZDFhNWNiYWUyMjc4MmNjNDAwODc3ODg1ZjNhZWE3YzIzNjYuLjRj
MWI5Zjg4OTA4NDY1N2IzZTMxMjE1NDM2NmE0NjM4Njg2OWNiMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29kZWdlbi9tYWluLnB5CkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEJ1aWx0aW5zR2Vu
ZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMK
ICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAgIGRlZiBnZW5lcmF0ZV9m
cm9tX2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0aW5zX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIGZy
YW1ld29ya19uYW1lPSIiLCBjb21iaW5lZF9vdXRwdXRzPUZhbHNlLCBnZW5lcmF0ZV93cmFwcGVy
PUZhbHNlKToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhzZWxmLCBidWlsdGlu
c19maWxlcywgb3V0cHV0X2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJpbmVkX291
dHB1dHM9RmFsc2UsIGdlbmVyYXRlX3dyYXBwZXJzPUZhbHNlKToKICAgICAgICAgY21kID0gWydw
eXRob24nLAogICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHknLAogICAgICAgICAgICAgICAgJy0tb3V0cHV0LWRpcmVjdG9yeScsIG91
dHB1dF9kaXJlY3RvcnksCkBAIC00OCwxNiArNDgsMTUgQEAgY2xhc3MgQnVpbHRpbnNHZW5lcmF0
b3JUZXN0czoKICAgICAgICAgaWYgY29tYmluZWRfb3V0cHV0czoKICAgICAgICAgICAgIGNtZC5h
cHBlbmQoJy0tY29tYmluZWQnKQogCi0gICAgICAgIGlmIGdlbmVyYXRlX3dyYXBwZXI6CisgICAg
ICAgIGlmIGdlbmVyYXRlX3dyYXBwZXJzOgogICAgICAgICAgICAgY21kLmFwcGVuZCgnLS13cmFw
cGVycycpCiAKLSAgICAgICAgY21kLmFwcGVuZChidWlsdGluc19maWxlKQotCisgICAgICAgIGNt
ZC5leHRlbmQoYnVpbHRpbnNfZmlsZXMpCiAgICAgICAgIGV4aXRfY29kZSA9IDAKICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgc3RkZXJyX291dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKGNtZCkKICAgICAgICAgICAgIGlmIHN0ZGVycl9vdXRwdXQ6Ci0gICAgICAgICAgICAgICAg
c2VsZi53cml0ZV9lcnJvcl9maWxlKGJ1aWx0aW5zX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIHN0
ZGVycl9vdXRwdXQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9lcnJvcl9maWxlKGZyYW1l
d29ya19uYW1lICsgIkpTQnVpbHRpbnMuaC1lcnJvciIgaWYgZ2VuZXJhdGVfd3JhcHBlcnMgZWxz
ZSBidWlsdGluc19maWxlc1swXSwgb3V0cHV0X2RpcmVjdG9yeSwgc3RkZXJyX291dHB1dCkKICAg
ICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgogICAgICAgICAgICAgcHJpbnQgZS5vdXRwdXQK
ICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCkBAIC05MywzNyArOTIsNjEgQEAg
Y2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgICAgICAgICBwcmludCAnUEFT
UzogJXMnICUgb3V0cHV0X2ZpbGUKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKIAotICAg
IGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5
KToKKyAgICBkZWYgc2luZ2xlX2J1aWx0aW5fdGVzdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RfZmls
ZXMsIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgKGZyYW1ld29ya19uYW1lLCB0ZXN0X2Nhc2Us
IG91dHB1dF9tb2RlKSA9IHRlc3RfbmFtZS5zcGxpdCgnLScpCisgICAgICAgIGlmIG5vdCBmcmFt
ZXdvcmtfbmFtZSBvciBub3Qgb3V0cHV0X21vZGUgb3Igbm90IHRlc3RfY2FzZToKKyAgICAgICAg
ICAgIHByaW50ICJJbnZhbGlkIHRlc3QgY2FzZSBuYW1lOiBzaG91bGQgYmUgRnJhbWV3b3JrLVRl
c3RDYXNlTmFtZS1PdXRwdXRNb2RlLmpzIgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgY29tYmluZWRfb3V0cHV0cyA9IG91dHB1dF9tb2RlID09ICJDb21iaW5lZCIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyh0ZXN0X2ZpbGVzLCB3b3Jr
X2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUsIGNvbWJpbmVkX291dHB1
dHM9Y29tYmluZWRfb3V0cHV0cykKKworICAgIGRlZiB3cmFwcGVyc19idWlsdGluX3Rlc3Qoc2Vs
ZiwgdGVzdF9uYW1lLCB0ZXN0X2ZpbGVzLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgIHJldHVy
biBzZWxmLmdlbmVyYXRlX2Zyb21fanNfYnVpbHRpbnModGVzdF9maWxlcywgd29ya19kaXJlY3Rv
cnksIGZyYW1ld29ya19uYW1lPSJXZWJDb3JlIiwgZ2VuZXJhdGVfd3JhcHBlcnM9VHJ1ZSkKKwor
ICAgIGRlZiBydW5fdGVzdChzZWxmLCByZWZlcmVuY2VfZGlyZWN0b3J5LCB0ZXN0X25hbWUsIHRl
c3RfZmlsZXMsIGdlbmVyYXRlX2J1aWx0aW4pOgorICAgICAgICByZXN1bHQgPSBUcnVlCisgICAg
ICAgICMgR2VuZXJhdGUgb3V0cHV0IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChlaXRoZXIgdGhl
IGdpdmVuIG9uZSBvciBhIHRlbXAgb25lIGlmIHJlc2V0X3Jlc3VsdHMgaXMgbm90IHBlcmZvcm1l
ZCkKICAgICAgICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CisgICAgICAg
IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9
IHRlbXBmaWxlLm1rZHRlbXAoImJ1aWx0aW4tZ2VuZXJhdG9yLXRlc3RzIikKKworICAgICAgICBp
ZiBnZW5lcmF0ZV9idWlsdGluKHRlc3RfbmFtZSwgdGVzdF9maWxlcywgd29ya19kaXJlY3Rvcnkp
OgorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKIAorICAgICAgICBpZiBzZWxmLnJlc2V0X3Jl
c3VsdHM6CisgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUg
KHRlc3RfbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBEZXRlY3Qg
Y2hhbmdlcworICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCBy
ZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAg
IHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0
b3J5KToKICAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICBzZXBhcmF0ZWx5X2dlbmVyYXRl
ZF9maWxlcyA9IFtdCiAgICAgICAgIGZvciBpbnB1dF9maWxlIGluIG9zLmxpc3RkaXIoaW5wdXRf
ZGlyZWN0b3J5KToKICAgICAgICAgICAgICh0ZXN0X25hbWUsIGV4dGVuc2lvbikgPSBvcy5wYXRo
LnNwbGl0ZXh0KGlucHV0X2ZpbGUpCiAgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gJy5qcyc6
CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICMgR2VuZXJhdGUgb3V0cHV0
IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChlaXRoZXIgdGhlIGdpdmVuIG9uZSBvciBhCi0gICAg
ICAgICAgICAjIHRlbXAgb25lIGlmIG5vdCByZXNldF9yZXN1bHRzIGlzIHBlcmZvcm1lZCkKLSAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgd29y
a19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLQotICAgICAgICAgICAgKGZyYW1ld29y
a19uYW1lLCB0ZXN0X2Nhc2UsIG91dHB1dF9tb2RlKSA9IHRlc3RfbmFtZS5zcGxpdCgnLScpCi0g
ICAgICAgICAgICBpZiBub3QgZnJhbWV3b3JrX25hbWUgb3Igbm90IG91dHB1dF9tb2RlIG9yIG5v
dCB0ZXN0X2Nhc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5h
bWU6IHNob3VsZCBiZSBGcmFtZXdvcmstVGVzdENhc2VOYW1lLU91dHB1dE1vZGUuanMiCi0gICAg
ICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgY29tYmluZWRfb3V0cHV0cyA9IG91
dHB1dF9tb2RlID09ICJDb21iaW5lZCIKLSAgICAgICAgICAgIGdlbmVyYXRlX3dyYXBwZXIgPSBm
cmFtZXdvcmtfbmFtZSA9PSAiV2ViQ29yZSIKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVf
ZnJvbV9qc19idWlsdGlucyhvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxl
KSwgd29ya19kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19uYW1lLCBjb21iaW5l
ZF9vdXRwdXRzPWNvbWJpbmVkX291dHB1dHMsIGdlbmVyYXRlX3dyYXBwZXI9Z2VuZXJhdGVfd3Jh
cHBlcik6CisgICAgICAgICAgICB0ZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0
b3J5LCBpbnB1dF9maWxlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuX3Rlc3QocmVmZXJl
bmNlX2RpcmVjdG9yeSwgdGVzdF9uYW1lLCBbdGVzdF9maWxlXSwgc2VsZi5zaW5nbGVfYnVpbHRp
bl90ZXN0KToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCisgICAgICAgICAgICAj
IEZJWE1FOiBBZGQgRXJyb3IgcGFyYW1ldGVyIGluIGZpbGVuYW1lIGFuZCBmaWx0ZXIgb3V0IHRo
ZXNlIGZpbGVzIGhlcmUuCisgICAgICAgICAgICBpZiAnU2VwYXJhdGUnIGluIHRlc3RfbmFtZSBh
bmQgJ1dlYkNvcmUnIGluIHRlc3RfbmFtZSBhbmQgbm90ICdEdXBsaWNhdGUnIGluIHRlc3RfbmFt
ZToKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlcy5hcHBlbmQodGVz
dF9maWxlKQorCiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAg
ICAgICAgcHJpbnQgIlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAlIChpbnB1dF9maWxlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMK
LSAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVy
ZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBpZiBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlczoK
KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0KHJlZmVyZW5jZV9kaXJlY3RvcnksICJX
ZWJDb3JlSlNCdWlsdGlucy5oIiwgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXMsIHNlbGYud3Jh
cHBlcnNfYnVpbHRpbl90ZXN0KToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQotICAg
ICAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKIAogICAgICAgICByZXR1cm4g
cGFzc2VkCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284250</attachid>
            <date>2016-07-21 13:05:08 -0700</date>
            <delta_ts>2016-07-22 01:03:47 -0700</delta_ts>
            <desc>Fixing according comments</desc>
            <filename>bug-159921-20160721220406.patch</filename>
            <type>text/plain</type>
            <size>96672</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MTg5OTNhYjdiZWYyMDRmYjhkMjVkN2EyODExNzBiODE5NjI4ZGEzLi42NjU3Y2ZiOTUwODU5MWU5
YzlmNTRlMDBhZGQ2MjUyNGZjMmRkMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNi0wNy0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBi
dWlsdC1pbiBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb25seSB3cmFwcGVyIGZpbGVzIHdoZW4gcGFz
c2VkIHRoZSAtLXdyYXBwZXJzLW9ubHkgb3B0aW9uLgorICAgICAgICBXaGVuIHRoaXMgb3B0aW9u
IGlzIHVzZWQsIHdycXBwZXIgZmlsZXMgYXJlIGdlbmVyYXRlZCBidXQgbm8gaW5kaXZpZHVhbCBm
aWxlIGlzIGdlbmVyYXRlZC4KKyAgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCwg
aW5kaXZpZHVhbCBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ1dCBub3Qgd3JhcHBlciBmaWxlIGlzIGdl
bmVyYXRlZC4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3Qg
cnVubmVyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIFdlYkNvcmUtV3JhcHBlcnMuaC1yZXN1bHQgZ2Vu
ZXJhdGVkIGZvciBhbGwKKyAgICAgICAgV2ViQ29yZSB0ZXN0IGZpbGVzLCBsaWtlIHVzZWQgZm9y
IHJlYWwgaW4gV2ViQ29yZS4KKyAgICAgICAgUHJldmlvdXNseSB3cmFwcGVyIGNvZGUgd2FzIGdl
bmVyYXRlZCBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggV2ViQ29yZSB0ZXN0IGZpbGUuCisKKyAgICAg
ICAgQWRkZWQgbmV3IGJ1aWx0LWluIHRlc3QgZmlsZSB0byBjb3ZlciB0aGUgY2FzZSBvZiBjb25j
YXRlbmF0aW5nIHNldmVyYWwgZ3VhcmRzIGluIGdlbmVyYXRlZCBXZWJDb3JlIHdyYXBwZXIgZmls
ZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5OgorICAgICAg
ICAoY29uY2F0ZW5hdGVkX291dHB1dF9maWxlbmFtZSk6IENvbXB1dGUgYSBkZWNlbnQgbmFtZSBm
b3Igd3JhcHBlciBmaWxlcyBpbiBjYXNlIG9mIHRlc3QgbW9kZS4KKyAgICAgICAgKGdlbmVyYXRl
X2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyk6IFdoZW4gLS13cmFwcGVycyBpcyBhY3RpdmF0
ZWQsIHRoaXMgZ2VuZXJhdGVzIG9ubHkgdGhlIHdyYXBwZXIgZmlsZXMsIG5vdCB0aGUgaW5kaXZp
ZHVhbCBmaWxlcy4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL1dlYkNvcmUtQW5v
dGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanM6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Bbm90aGVyR3VhcmRlZElu
dGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkLVNlcGFyYXRlLmpzLXJlc3VsdDogUmVtb3ZlZCB3cmFwcGVyIGNvZGUuCisgICAgICAgICog
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdDogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlu
cy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVz
dWx0OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dl
YkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQ6IERpdHRvLgorICAgICAg
ICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0
LVNlcGFyYXRlLmpzLXJlc3VsdDogUmVtb3ZlZCB3cmFwcGVyIGNvZGUuCisgICAgICAgICogU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlSlNCdWlsdGlucy5oLXJlc3VsdDog
QWRkZWQsIGNvbnRhaW5zIHdyYXBwZXIgY29kZSBmb3IgYWxsIFdlYkNvcmUgdmFsaWQgdGVzdCBj
YXNlcy4KKwogMjAxNi0wNy0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KIAogICAgICAgICBbRVM3XSBJbnRyb2R1Y2UgZXhwb25lbnRpYXRpb24gZXhwcmVzc2lvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDliNjQxZTZhMGNlNTI0Mzk1NjVkNjBmYzY1NGZmYTY1OGE2YjQzZGEuLjVh
ZTdiNThjNzAyYmE5MmU1MmFiODVlZDVmZTNlZDNjYjUyZDU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNi0wNy0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBhbmQgYWRkZWQgYnVpbHQtaW5zIHRlc3RzLgorCisgICAgICAgIFVwZGF0aW5n
IGJ1aWx0IHN5c3RlbSBhY2NvcmRpbmcgLS0td3JhcHBlcnMgbmV3IG1lYW5pbmcuCisgICAgICAg
IGJ1aWx0aW4gZ2VuZXJhdG9yIGlzIG5vdyBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBidWls
dC1pbiBmaWxlIHBsdXMgb25jZSBmb3IgV2ViQ29yZSB3cmFwcGVyIGZpbGVzLgorICAgICAgICBX
ZWJDb3JlIHdyYXBwZXIgZmlsZXMgYWxsb3cgaGFuZGxpbmcgdGhpbmdzIGxpa2UgY29uZGl0aW9u
YWxseSBndWFyZGVkIGZlYXR1cmVzLgorICAgICAgICBUaGV5IGFsc28gcmVtb3ZlIHRoZSBuZWVk
IHRvIHVzZSBidWlsdC1pbnMgbWFjcm9zIG91dHNpZGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCiAy
MDE2LTA3LTIxICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
W1RocmVhZGVkIENvbXBvc2l0b3JdIEZsaWNrZXJpbmcgd2hlbiB6b29taW5nIGluL291dCBpbiBt
YXBzLmdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkKaW5kZXggZDllN2MxNTBlZGEwZjNmZjM4NjU2MjM0NTll
NjI2ZTQzYmUxYTkxZi4uOTExZjEzNmNiZTUzZTVhNmM4NTEyY2IwNmY1MDVjZmJlYjk3MjM3MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkKQEAgLTM3LDE1ICszNywyMCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKIAogZnJvbSBsYXp5d3JpdGVyIGltcG9ydCBMYXp5RmlsZVdyaXRlcgogCi1pbXBv
cnQgYnVpbHRpbnMKIGZyb20gYnVpbHRpbnMgaW1wb3J0ICoKIAogCitkZWYgY29uY2F0ZW5hdGVk
X291dHB1dF9maWxlbmFtZShidWlsdGluc19maWxlcywgZnJhbWV3b3JrX25hbWUsIGdlbmVyYXRl
X29ubHlfd3JhcHBlcl9maWxlcyk6CisgICAgaWYgZ2VuZXJhdGVfb25seV93cmFwcGVyX2ZpbGVz
OgorICAgICAgICByZXR1cm4gZnJhbWV3b3JrX25hbWUgKyAnSlNCdWlsdGlucy5oLXJlc3VsdCcK
KyAgICByZXR1cm4gb3MucGF0aC5iYXNlbmFtZShidWlsdGluc19maWxlc1swXSkgKyAnLXJlc3Vs
dCcKKworCiBkZWYgZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5z
X2ZpbGVzPVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXRfcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbWJpbmVkX291dHB1dD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfd3JhcHBlcl9maWxlcz1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfb25seV93cmFwcGVyX2Zp
bGVzPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFt
ZXdvcmtfbmFtZT0iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yY2Vfb3V0cHV0PUZhbHNlKToKIApAQCAtNzEsMTYgKzc2LDE2IEBAIGRlZiBnZW5lcmF0ZV9i
aW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVpbHRpbnNfZmlsZXM9W10sCiAgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zQ29tYmluZWRJbXBsZW1lbnRhdGlvbkdlbmVyYXRvciht
b2RlbCkpCiAgICAgZWxzZToKICAgICAgICAgbG9nLmRlYnVnKCJVc2luZyBnZW5lcmF0b3Igc3R5
bGU6IHNpbmdsZSBmaWxlcyBmb3IgZWFjaCBidWlsdGluLiIpCi0gICAgICAgIGZvciBvYmplY3Qg
aW4gbW9kZWwub2JqZWN0czoKLSAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5z
U2VwYXJhdGVIZWFkZXJHZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCi0gICAgICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSW1wbGVtZW50YXRpb25HZW5lcmF0b3IobW9k
ZWwsIG9iamVjdCkpCi0KLSAgICAgICAgaWYgZ2VuZXJhdGVfd3JhcHBlcl9maWxlczoKKyAgICAg
ICAgaWYgZ2VuZXJhdGVfb25seV93cmFwcGVyX2ZpbGVzOgogICAgICAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQnVpbHRpbnNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKG1vZGVsKSkKICAgICAgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKG1vZGVsKSkKIAogICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNJbnRl
cm5hbHNXcmFwcGVySGVhZGVyR2VuZXJhdG9yKG1vZGVsKSkKICAgICAgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KG1vZGVsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBvYmplY3QgaW4gbW9kZWwu
b2JqZWN0czoKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFy
YXRlSGVhZGVyR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQorICAgICAgICAgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKEJ1aWx0aW5zU2VwYXJhdGVJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2Rl
bCwgb2JqZWN0KSkKIAogICAgIGxvZy5kZWJ1ZygiIikKICAgICBsb2cuZGVidWcoIkdlbmVyYXRp
bmcgYmluZGluZ3MgZm9yIGJ1aWx0aW5zLiIpCkBAIC0xMDcsOSArMTEyLDkgQEAgZGVmIGdlbmVy
YXRlX2JpbmRpbmdzX2Zvcl9idWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAg
ICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKIAogICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoK
LSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5iYXNlbmFtZShidWlsdGlu
c19maWxlc1swXSkgKyAnLXJlc3VsdCcpCisgICAgICAgIGZpbGVuYW1lID0gY29uY2F0ZW5hdGVk
X291dHB1dF9maWxlbmFtZShidWlsdGluc19maWxlcywgZnJhbWV3b3JrX25hbWUsIGdlbmVyYXRl
X29ubHlfd3JhcHBlcl9maWxlcykKICAgICAgICAgb3V0cHV0X2ZpbGVwYXRoID0gb3MucGF0aC5q
b2luKG91dHB1dF9wYXRoLCBmaWxlbmFtZSkKLSAgICAgICAgbG9nLmRlYnVnKCJXcml0aW5nIGZp
bGU6ICVzIiAlIG91dHB1dF9maWxlcGF0aCkgCisgICAgICAgIGxvZy5kZWJ1ZygiV3JpdGluZyBm
aWxlOiAlcyIgJSBvdXRwdXRfZmlsZXBhdGgpCiAgICAgICAgIG91dHB1dF9maWxlID0gTGF6eUZp
bGVXcml0ZXIob3V0cHV0X2ZpbGVwYXRoLCBmb3JjZV9vdXRwdXQpCiAgICAgICAgIG91dHB1dF9m
aWxlLndyaXRlKCdcbicuam9pbih0ZXN0X3Jlc3VsdF9maWxlX2NvbnRlbnRzKSkKICAgICAgICAg
b3V0cHV0X2ZpbGUuY2xvc2UoKQpAQCAtMTIyLDcgKzEyNyw3IEBAIGlmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9
ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IkRlc3RpbmF0
aW9uIGZyYW1ld29yayBmb3IgZ2VuZXJhdGVkIGZpbGVzLiIpCiAgICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItLWZvcmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRm9yY2Ugb3V0cHV0
IG9mIGdlbmVyYXRlZCBzY3JpcHRzLCBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4iKQogICAgIGNs
aV9wYXJzZXIuYWRkX29wdGlvbigiLS1jb21iaW5lZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhl
bHA9IlByb2R1Y2Ugb25lIC5oLy5jcHAgZmlsZSBpbnN0ZWFkIG9mIHByb2R1Y2luZyBvbmUgcGVy
IGJ1aWx0aW4gb2JqZWN0LiIpCi0gICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXdyYXBwZXJz
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iUHJvZHVjZSAuaC8uY3BwIHdyYXBwZXIgZmls
ZXMgdG8gZWFzZSBpbnRlZ3JhdGlvbiBvZiB0aGUgYnVpbHRpbnMuIikKKyAgICBjbGlfcGFyc2Vy
LmFkZF9vcHRpb24oIi0td3JhcHBlcnMtb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9
IlByb2R1Y2UgLmgvLmNwcCB3cmFwcGVyIGZpbGVzIHRvIGVhc2UgaW50ZWdyYXRpb24gb2YgdGhl
IGJ1aWx0aW5zLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwg
YWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5n
IHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIs
ICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiIp
CiAKQEAgLTE0Nyw3ICsxNTIsNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAg
ICAnb3V0cHV0X3BhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXRfZGlyZWN0b3J5LAogICAgICAgICAn
ZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5mcmFtZXdvcmssCiAgICAgICAgICdjb21iaW5l
ZF9vdXRwdXQnOiBhcmdfb3B0aW9ucy5jb21iaW5lZCwKLSAgICAgICAgJ2dlbmVyYXRlX3dyYXBw
ZXJfZmlsZXMnOiBhcmdfb3B0aW9ucy53cmFwcGVycywKKyAgICAgICAgJ2dlbmVyYXRlX29ubHlf
d3JhcHBlcl9maWxlcyc6IGFyZ19vcHRpb25zLndyYXBwZXJzX29ubHksCiAgICAgICAgICdmb3Jj
ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZSwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1
dCc6IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvV2ViQ29yZS1Bbm90aGVyR3VhcmRlZEludGVy
bmFsQnVpbHRpbi1TZXBhcmF0ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJh
dGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzVmYWUzZmUyNjdlMmJmODhhZjBlODIzODU1YjAxN2ZkMjBiNWNk
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3Rz
L2J1aWx0aW5zL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUu
anMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIEBjb25kaXRpb25hbD1FTkFCTEUoRkVUQ0hfQVBJKQorLy8gQGludGVybmFs
CisKK2Z1bmN0aW9uIGxldHNGZXRjaCgpCit7CisgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1
cm4gQGZldGNoUmVxdWVzdChuZXcgQFJlcXVlc3QoInllcyIpKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNv
cmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZS1Bbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTI0ZmQwMzAxNDA0MDZhMDc1MGQ0MTJjMzY4YTVkOWZlNDhmZDU2OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4
cGVjdGVkL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMt
cmVzdWx0CkBAIC0wLDAgKzEsMjI3IEBACisjIyMgQmVnaW4gRmlsZTogQW5vdGhlckd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2Ny
aXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorCisjaW5jbHVkZSA8YnVpbHRpbnMvQnVpbHRpblV0aWxz
Lmg+CisjaW5jbHVkZSA8Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGU7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyogQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4g
Ki8KK2V4dGVybiBjb25zdCBjaGFyKiBzX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluTGV0
c0ZldGNoQ29kZTsKK2V4dGVybiBjb25zdCBpbnQgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVp
bHRpbkxldHNGZXRjaENvZGVMZW5ndGg7CitleHRlcm4gY29uc3QgSlNDOjpDb25zdHJ1Y3RBYmls
aXR5IHNfYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlQ29uc3RydWN0
QWJpbGl0eTsKKworI2RlZmluZSBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5B
TEJVSUxUSU5fQlVJTFRJTl9EQVRBKG1hY3JvKSBcCisgICAgbWFjcm8obGV0c0ZldGNoLCBhbm90
aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkxldHNGZXRjaCwgMCkgXAorCisjZGVmaW5lIFdFQkNP
UkVfQlVJTFRJTl9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9MRVRTRkVUQ0ggMQorCisj
ZGVmaW5lIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlM
VElOX0NPREUobWFjcm8pIFwKKyAgICBtYWNybyhhbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkxldHNGZXRjaENvZGUsIGxldHNGZXRjaCwgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkxldHNGZXRjaENvZGVMZW5ndGgpIFwKKworI2RlZmluZSBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhF
UkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKG1hY3JvKSBcCisg
ICAgbWFjcm8obGV0c0ZldGNoKSBcCisKKyNkZWZpbmUgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRP
Uihjb2RlTmFtZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudENvdW50KSBcCisgICAgSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYpOworCitXRUJDT1JF
X0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFQ0xB
UkVfQlVJTFRJTl9HRU5FUkFUT1IpCisjdW5kZWYgREVDTEFSRV9CVUlMVElOX0dFTkVSQVRPUgor
CitjbGFzcyBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciA6IHBy
aXZhdGUgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyKEpTQzo6Vk0qIHZtKQorICAg
ICAgICA6IG1fdm0oKnZtKQorICAgICAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJ
TlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKElOSVRJQUxJWkVfQlVJTFRJTl9O
QU1FUykKKyNkZWZpbmUgSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKG5hbWUsIGZ1
bmN0aW9uTmFtZSwgbGVuZ3RoKSAsIG1fIyNuYW1lIyNTb3VyY2UoSlNDOjptYWtlU291cmNlKFN0
cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKHNfIyNuYW1lLCBsZW5ndGgpKSkKKyAgICAgICAg
V0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09E
RShJTklUSUFMSVpFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMpCisjdW5kZWYgSU5JVElBTElaRV9C
VUlMVElOX1NPVVJDRV9NRU1CRVJTCisgICAgeworICAgIH0KKworI2RlZmluZSBFWFBPU0VfQlVJ
TFRJTl9FWEVDVVRBQkxFUyhuYW1lLCBmdW5jdGlvbk5hbWUsIGxlbmd0aCkgXAorICAgIEpTQzo6
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG5hbWUjI0V4ZWN1dGFibGUoKTsgXAorICAgIGNv
bnN0IEpTQzo6U291cmNlQ29kZSYgbmFtZSMjU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV8jI25h
bWUjI1NvdXJjZTsgfQorICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFM
QlVJTFRJTl9CVUlMVElOX0NPREUoRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMpCisjdW5kZWYg
RVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMKKworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVS
R1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlM
VElOX0lERU5USUZJRVJfQUNDRVNTT1IpCisKKyAgICB2b2lkIGV4cG9ydE5hbWVzKCk7CisKK3By
aXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVS
R1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlM
VElOX05BTUVTKQorCisjZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhuYW1l
LCBmdW5jdGlvbk5hbWUsIGxlbmd0aCkgXAorICAgIEpTQzo6U291cmNlQ29kZSBtXyMjbmFtZSMj
U291cmNlO1wKKyAgICBKU0M6OldlYWs8SlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4g
bV8jI25hbWUjI0V4ZWN1dGFibGU7CisgICAgV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVE
SU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJF
UlMpCisjdW5kZWYgREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTCisKK307CisKKyNkZWZp
bmUgREVGSU5FX0JVSUxUSU5fRVhFQ1VUQUJMRVMobmFtZSwgZnVuY3Rpb25OYW1lLCBsZW5ndGgp
IFwKK2lubGluZSBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBBbm90aGVyR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlcjo6bmFtZSMjRXhlY3V0YWJsZSgpIFwKK3tc
CisgICAgaWYgKCFtXyMjbmFtZSMjRXhlY3V0YWJsZSlcCisgICAgICAgIG1fIyNuYW1lIyNFeGVj
dXRhYmxlID0gSlNDOjpXZWFrPEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KEpTQzo6
Y3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUobV92bSwgbV8jI25hbWUjI1NvdXJjZSwgZnVuY3Rpb25O
YW1lIyNQdWJsaWNOYW1lKCksIHNfIyNuYW1lIyNDb25zdHJ1Y3RBYmlsaXR5KSwgdGhpcywgJm1f
IyNuYW1lIyNFeGVjdXRhYmxlKTtcCisgICAgcmV0dXJuIG1fIyNuYW1lIyNFeGVjdXRhYmxlLmdl
dCgpO1wKK30KK1dFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9C
VUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fRVhFQ1VUQUJMRVMpCisjdW5kZWYgREVGSU5FX0JV
SUxUSU5fRVhFQ1VUQUJMRVMKKworaW5saW5lIHZvaWQgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1
aWx0aW5CdWlsdGluc1dyYXBwZXI6OmV4cG9ydE5hbWVzKCkKK3sKKyNkZWZpbmUgRVhQT1JUX0ZV
TkNUSU9OX05BTUUobmFtZSkgbV92bS5wcm9wZXJ0eU5hbWVzLT5hcHBlbmRFeHRlcm5hbE5hbWUo
bmFtZSMjUHVibGljTmFtZSgpLCBuYW1lIyNQcml2YXRlTmFtZSgpKTsKKyAgICBXRUJDT1JFX0ZP
UkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1F
KEVYUE9SVF9GVU5DVElPTl9OQU1FKQorI3VuZGVmIEVYUE9SVF9GVU5DVElPTl9OQU1FCit9CisK
K2NsYXNzIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
RnVuY3Rpb25zKEpTQzo6Vk0mIHZtKSA6IG1fdm0odm0pIHsgfQorCisgICAgdm9pZCBpbml0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmKTsKKyAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsK
KworcHVibGljOgorICAgIEpTQzo6Vk0mIG1fdm07CisKKyNkZWZpbmUgREVDTEFSRV9CVUlMVElO
X1NPVVJDRV9NRU1CRVJTKGZ1bmN0aW9uTmFtZSkgXAorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpT
Qzo6SlNGdW5jdGlvbj4gbV8jI2Z1bmN0aW9uTmFtZSMjRnVuY3Rpb247CisgICAgV0VCQ09SRV9G
T1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFN
RShERUNMQVJFX0JVSUxUSU5fU09VUkNFX01FTUJFUlMpCisjdW5kZWYgREVDTEFSRV9CVUlMVElO
X1NPVVJDRV9NRU1CRVJTCit9OworCitpbmxpbmUgdm9pZCBBbm90aGVyR3VhcmRlZEludGVybmFs
QnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnM6OmluaXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworI2RlZmluZSBFWFBPUlRfRlVOQ1RJT04oY29kZU5hbWUsIGZ1bmN0aW9uTmFt
ZSwgbGVuZ3RoKVwKKyAgICBtXyMjZnVuY3Rpb25OYW1lIyNGdW5jdGlvbi5zZXQobV92bSwgJmds
b2JhbE9iamVjdCwgSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24obV92bSwg
Y29kZU5hbWUjI0dlbmVyYXRvcihtX3ZtKSwgJmdsb2JhbE9iamVjdCkpOworICAgIFdFQkNPUkVf
Rk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0NPREUoRVhQT1JU
X0ZVTkNUSU9OKQorI3VuZGVmIEVYUE9SVF9GVU5DVElPTgorfQorCitpbmxpbmUgdm9pZCBBbm90
aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisjZGVmaW5lIFZJU0lUX0ZVTkNUSU9OKG5hbWUpIHZpc2l0
b3IuYXBwZW5kKCZtXyMjbmFtZSMjRnVuY3Rpb24pOworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9U
SEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoVklTSVRfRlVO
Q1RJT04pCisjdW5kZWYgVklTSVRfRlVOQ1RJT04KK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorIyMjIEVuZCBGaWxlOiBBbm90aGVy
R3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IEFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwCisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGlu
QnVpbHRpbnMuaCIKKworI2lmIEVOQUJMRShGRVRDSF9BUEkpCisKKyNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8cnVudGltZS9FeGVjdXRhYmxlLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Fub3RoZXJH
dWFyZGVkSW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29kZUNvbnN0cnVjdEFiaWxpdHkgPSBKU0M6
OkNvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKK2NvbnN0IGludCBzX2Fub3RoZXJH
dWFyZGVkSW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29kZUxlbmd0aCA9IDgyOworc3RhdGljIGNv
bnN0IEpTQzo6SW50cmluc2ljIHNfYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0
Y2hDb2RlSW50cmluc2ljID0gSlNDOjpOb0ludHJpbnNpYzsKK2NvbnN0IGNoYXIqIHNfYW5vdGhl
ckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlID0KKyAgICAiKGZ1bmN0aW9uICgp
XG4iIFwKKyAgICAie1xuIiBcCisgICAgIiAgIFwidXNlIHN0cmljdFwiO1xuIiBcCisgICAgIiAg
ICByZXR1cm4gQGZldGNoUmVxdWVzdChuZXcgQFJlcXVlc3QoXCJ5ZXNcIikpO1xuIiBcCisgICAg
In0pXG4iIFwKKzsKKworCisjZGVmaW5lIERFRklORV9CVUlMVElOX0dFTkVSQVRPUihjb2RlTmFt
ZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudENvdW50KSBcCitKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZSogY29kZU5hbWUjI0dlbmVyYXRvcihKU0M6OlZNJiB2bSkgXAore1wKKyAgICBKU1ZNQ2xpZW50
RGF0YSogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7IFwKKyAgICByZXR1cm4gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLmFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5jb2RlTmFtZSMjRXhlY3V0YWJsZSgp
LT5saW5rKHZtLCBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkuYW5vdGhlckd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpLmNvZGVOYW1lIyNTb3VyY2UoKSwgTnVsbG9wdCwgc18j
I2NvZGVOYW1lIyNJbnRyaW5zaWMpOyBcCit9CitXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJE
RURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikK
KyN1bmRlZiBERUZJTkVfQlVJTFRJTl9HRU5FUkFUT1IKKworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorCisjIyMgRW5kIEZpbGU6IEFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFy
Yml0cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCBjNGFjNzgyZGE5MzZl
ZjZkNWZjNWEzZTU1MzVkYzY5N2QwYjhlNjNiLi40ZDcwYThhMTBjMWI0MWFmZmUxNmE0ZjQxNzQ4
NDE2MjA1YTU3NjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90
ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmQt
U2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rl
c3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1T
ZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTE5NSwyMjAgKzE5NSwzIEBAIFdFQkNPUkVfRk9SRUFDSF9B
UkJJVFJBUllDT05ESVRJT05BTEdVQVJEX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5F
UkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCiAKICMjIyBF
bmQgRmlsZTogQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBD
YW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFT
Y3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucy5oIgotI2luY2x1
ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0
aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhK
U0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkg
fHwgVVNFKENGKQotICAgICAgICAsIG1fYXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5z
KCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgIHsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLSAgICBBcmJpdHJh
cnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBhcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkQnVpbHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlu
czsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQotCi1wcml2YXRl
OgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0Yp
Ci0gICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zV3JhcHBlciBtX2FyYml0cmFy
eUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
IHx8IFVTRShDRikKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTog
V2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0
aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRl
LWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVp
bHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zKEpTQzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAg
IHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0KLXByaXZhdGU6Ci0gICAg
SlNDOjpWTSYgbV92bTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmls
ZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQg
ZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5j
bHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVp
bHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0odm0pOwotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25z
Ojp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6
ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xvYmFs
T2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgIH07Ci0g
ICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZ
X0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRl
LmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5z
L2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CmluZGV4
IDhkMTNkNmE4ZWMwMzA1ZGVkZmM5YmZjOTlkNmNjN2UwNTUxMWJmY2UuLjNmODEzMjUxYTQzOGYw
ZDgxN2FmNzBiMmUyN2E4YjE2MDY5NTJmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEJ1aWx0
aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUu
anMtcmVzdWx0CkBAIC0xOTUsMjIwICsxOTUsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFREJV
SUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikKICNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogR3VhcmRlZEJ1aWx0aW5CdWlsdGlu
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCi0j
aW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpT
QnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rp
b25zKEpTQzo6Vk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgICAgICAsIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgewotICAgIH0KLQotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEJ1aWx0aW5C
dWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBt
X2d1YXJkZWRCdWlsdGluQnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWls
dGlucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
IAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMu
cHkKLQotI2luY2x1ZGUgIkd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxl
OiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9y
Ci0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1
bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9i
amVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgewotcHVibGljOgotICAg
IGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKLQotICAgIHZv
aWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUds
b2JhbE9iamVjdCYpOwotCi0KLXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpT
Qzo6Vk0mIHZtKQotICAgIDogbV92bSh2bSkKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotfQot
Ci12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLX0KLQotdm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgSlNW
TUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPiht
X3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUlu
Zm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgIH07Ci0gICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRp
Y0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAppbmRleCA5ZjQ2MTZm
NzNkMTIwYTQwZGNkYTAzNzIyNTc3MGQzMGZiNGY2ZDdiLi4yMmFlNTFlNzlmNDYyMTRlMTcxODk2
ZmEzNWE1YzUzMDNmYWU4OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRJbnRlcm5hbEJ1aWx0
aW4tU2VwYXJhdGUuanMtcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1T
ZXBhcmF0ZS5qcy1yZXN1bHQKQEAgLTIyNywyNTIgKzIyNywzIEBAIFdFQkNPUkVfRk9SRUFDSF9H
VUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9HRU5FUkFU
T1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6IEd1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgot
Ly8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHdWFy
ZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgICAg
IDogbV92bSh2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgICAgICwgbV9ndWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoJm1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgIHsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgICAgIG1fZ3VhcmRlZElu
dGVybmFsQnVpbHRpbkJ1aWx0aW5zLmV4cG9ydE5hbWVzKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQotICAgIH0KLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3Zt
OwotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnNXcmFwcGVyIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOwotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBF
bmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
LS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJHdWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnMuY3BwIgotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotY2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlv
bnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpT
Qzo6Vk0mKTsKLQotICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90VmlzaXRvciYpOwotICAgIHZvaWQg
aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zJiBndWFyZGVkSW50
ZXJuYWxCdWlsdGluKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOyB9Ci0jZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi1wcml2YXRlOgotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICBKU0M6OlZNJiBtX3ZtOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0
aW5GdW5jdGlvbnMgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOwotI2VuZGlmIC8vIEVOQUJMRShT
VFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTog
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNC
dWlsdGluSW50ZXJuYWxzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgotCi0jaW5jbHVkZSAiSlNET01H
bG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCi0jaW5jbHVk
ZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFs
dWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OkpTQnVpbHRp
bkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkK
LSAgICA6IG1fdm0odm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKLSAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbihtX3ZtKQotI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotfQot
Ci12b2lkIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBtX2d1YXJkZWRJbnRl
cm5hbEJ1aWx0aW4udmlzaXQodmlzaXRvcik7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkKLSAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4uaW5pdChnbG9iYWxPYmplY3QpOwotI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAg
ICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KG1fdm0uY2xpZW50RGF0YSk7Ci0gICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3Bl
cnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotI2Rl
ZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXAotICAgIEpTRE9NR2xvYmFsT2JqZWN0
OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKLSAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rp
b25zKCkuZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUo
KSwgZ3VhcmRlZEludGVybmFsQnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpT
Qzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkpLAotICAgIFdFQkNPUkVfRk9SRUFDSF9HVUFS
REVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9T
VEFUSUMpCi0jdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCi0jZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQotICAgIH07Ci0gICAgZ2xvYmFsT2JqZWN0LmFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNsaWVudERhdGEpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpz
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4
cGVjdGVkL1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXgg
OWVhOTI4YzgwMTBmOGIwYWUxODYwZGQ5MmViNzEyNGE1MDQzM2U4OS4uNmQ2OGFlYWExOTBiY2Vm
OGRmNWYzMTg4NTQwMmVmYjM0MmY3NTNhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1Vbmd1YXJkZWRCdWls
dGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJh
dGUuanMtcmVzdWx0CkBAIC0xODYsMjE0ICsxODYsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfVU5HVUFS
REVEQlVJTFRJTl9CVUlMVElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAjIyMgRW5kIEZpbGU6IFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlu
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuaCIK
LSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5GdW5j
dGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgICAgIDogbV92bSh2bSkKLSAgICAgICAgLCBtX3VuZ3Vh
cmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKLSAgICB7Ci0gICAgfQotCi0gICAgVW5ndWFyZGVk
QnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1
cm4gbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7IH0KLQotcHJpdmF0ZToKLSAgICBKU0M6OlZN
JiBtX3ZtOwotICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV91bmd1YXJkZWRC
dWlsdGluQnVpbHRpbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZp
bGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBi
dWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5l
cmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiVW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5z
LmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBK
YXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rp
b25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhK
U0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lk
IGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6
Vk0mIG1fdm07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVz
IGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUg
PGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlz
aXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRv
cik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVj
dDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAgIGds
b2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5H
VEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVz
dHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFyYXRlLmpzLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVj
dGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKaW5kZXggNGEwMGJk
ZmYwNTZkYTllZmNlMjI0NTg5YTIxYTkzYzA5ZTg4YjFjZC4uOWRhZTg5Nzc1YmJmMTEwNjQ2Nzk5
NmM0Mzc0MGI5YTQ4NjQwYTEwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdUZXN0LVNlcGFy
YXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9i
dWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUuanMtcmVzdWx0
CkBAIC0yNzgsMjUyICsyNzgsMyBAQCBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVTVF9CVUlM
VElOX0NPREUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKIAogIyMjIEVuZCBGaWxlOiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0
aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0m
IHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAg
ICAsIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCZtX3ZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICAgICBtX3htbENh
c2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgWE1MQ2FzaW5nVGVz
dEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyByZXR1cm4gbV94bWxD
YXNpbmdUZXN0QnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXBy
aXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAg
WE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3JhcHBlciBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsKLSNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFdl
YkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmls
ZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAieG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJ4bWxDYXNpbmdUZXN0QnVpbHRpbnMuaCIKLSNpbmNs
dWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01H
bG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0K
LSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmKTsKLQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0dXJuIG1feG1s
Q2FzaW5nVGVzdDsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0ZToK
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNDOjpWTSYgbV92bTsKLSNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIFhNTENhc2lu
Z1Rlc3RCdWlsdGluRnVuY3Rpb25zIG1feG1sQ2FzaW5nVGVzdDsKLSNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1
ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0gICAgOiBtX3ZtKHZtKQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNpZiBFTkFC
TEUoU1RSRUFNU19BUEkpCi0gICAgLCBtX3htbENhc2luZ1Rlc3QobV92bSkKLSNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKLXsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0
KHZpc2l0b3IpOwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRp
YWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV94bWxDYXNp
bmdUZXN0LmluaXQoZ2xvYmFsT2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAg
IEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0g
ewotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElD
KG5hbWUpIFwKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCi0g
ICAgICAgIGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlu
cygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rp
b24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKLSAgICBXRUJDT1JF
X0ZPUkVBQ0hfWE1MQ0FTSU5HVEVTVF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9C
QUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwotI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxz
KHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVO
VVNFRF9QQVJBTShjbGllbnREYXRhKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZUpTQnVpbHRpbnMuaC1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFmN2QxNmQ3MzhjY2U0MmZkNGE5ZTJl
YTYyZjg2OWRkYjRmZjg2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVz
dWx0CkBAIC0wLDAgKzEsMzQ5IEBACisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlu
cyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1q
cy1idWlsdGlucy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25h
bEd1YXJkQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCisj
aW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiVW5n
dWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5z
LmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGlu
RnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisjaWYgRU5BQkxFKEZF
VENIX0FQSSkKKyAgICAgICAgLCBtX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bnMoJm1fdm0pCisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFN
U19BUEkpIHx8IFVTRShDRikKKyAgICAgICAgLCBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRC
dWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikK
KyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCisgICAgICAgICwgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoJm1f
dm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1fdW5ndWFyZGVk
QnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAgICAg
LCBtX3htbENhc2luZ1Rlc3RCdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCisgICAgeworI2lmIEVOQUJMRShGRVRDSF9BUEkpCisgICAgICAgIG1fYW5vdGhlckd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVO
QUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICBtX2d1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5leHBvcnROYW1lcygpOworI2VuZGlmIC8vIEVOQUJM
RShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgICAgIG1feG1sQ2Fz
aW5nVGVzdEJ1aWx0aW5zLmV4cG9ydE5hbWVzKCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgIH0KKworI2lmIEVOQUJMRShGRVRDSF9BUEkpCisgICAgQW5vdGhlckd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIGFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnMoKSB7IHJldHVybiBtX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkgfHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluc1dy
YXBwZXImIGFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGlucygpIHsgcmV0dXJuIG1fYXJi
aXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRC
dWlsdGluQnVpbHRpbnNXcmFwcGVyJiBndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4g
bV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJ
KQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVp
bHRpbnNXcmFwcGVyJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBt
X2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiB1bmd1YXJkZWRC
dWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQor
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbnNXcmFwcGVy
JiB4bWxDYXNpbmdUZXN0QnVpbHRpbnMoKSB7IHJldHVybiBtX3htbENhc2luZ1Rlc3RCdWlsdGlu
czsgfQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToKKyAgICBKU0M6
OlZNJiBtX3ZtOworI2lmIEVOQUJMRShGRVRDSF9BUEkpCisgICAgQW5vdGhlckd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkJ1aWx0aW5zOworI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKSB8fCBVU0UoQ0YpCisgICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5z
V3JhcHBlciBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsKKyNlbmRpZiAvLyBF
TkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisg
ICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5z
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
CisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAg
VW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlu
czsKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5zV3Jh
cHBlciBtX3htbENhc2luZ1Rlc3RCdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVK
U0J1aWx0aW5zLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCisvLyBidWlsdGlucyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWls
dGlucy5weQorCisjaW5jbHVkZSAiQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cy5jcHAiCisjaW5jbHVkZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcCIK
KyNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zLmNwcCIKKyNpbmNsdWRlICJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5C
dWlsdGlucy5jcHAiCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVzdEJ1aWx0aW5zLmNwcCIKKyMjIyBF
bmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJDb3Jl
SlNCdWlsdGluSW50ZXJuYWxzLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAi
R3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVkZSAieG1sQ2FzaW5nVGVz
dEJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5j
dGlvbnMoSlNDOjpWTSYpOworCisgICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyNpZiBFTkFCTEUoRkVU
Q0hfQVBJKQorICAgIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9u
cyYgYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBtX2Fub3RoZXJHdWFy
ZGVkSW50ZXJuYWxCdWlsdGluOyB9CisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5j
dGlvbnMmIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKSB7IHJldHVybiBtX2d1YXJkZWRJbnRlcm5h
bEJ1aWx0aW47IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rpb25zJiB4bWxDYXNpbmdU
ZXN0KCkgeyByZXR1cm4gbV94bWxDYXNpbmdUZXN0OyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQorCitwcml2YXRlOgorI2lmIEVOQUJMRShGRVRDSF9BUEkpIHx8IEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICBKU0M6OlZNJiBtX3ZtOworI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkp
IHx8IEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAgIEFub3Ro
ZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyBtX2Fub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluOworI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25z
IG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbjsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluRnVuY3Rp
b25zIG1feG1sQ2FzaW5nVGVzdDsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5J
bnRlcm5hbHMuaAorCisjIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgorLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVK
U0J1aWx0aW5JbnRlcm5hbHMuaCIKKworI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0pTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
cyhKU0M6OlZNJiB2bSkKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgOiBtX3ZtKHZtKQorI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpIHx8IEVOQUJM
RShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAgICwgbV9hbm90aGVyR3Vh
cmRlZEludGVybmFsQnVpbHRpbihtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICwgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluKG1f
dm0pCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQ
SSkKKyAgICAsIG1feG1sQ2FzaW5nVGVzdChtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1T
X0FQSSkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworfQorCit2b2lkIEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworI2lmIEVO
QUJMRShGRVRDSF9BUEkpCisgICAgbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbi52aXNp
dCh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW4udmlzaXQodmlzaXRvcik7Cisj
ZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAg
ICBtX3htbENhc2luZ1Rlc3QudmlzaXQodmlzaXRvcik7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQorICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKK30KKwordm9pZCBKU0J1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9uczo6aW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworI2lmIEVOQUJMRShGRVRD
SF9BUEkpCisgICAgbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbi5pbml0KGdsb2JhbE9i
amVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLmluaXQoZ2xvYmFsT2JqZWN0KTsKKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAg
IG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKQorCisjaWYgRU5BQkxFKEZFVENIX0FQSSkgfHwgRU5BQkxFKFNUUkVBTVNfQVBJ
KQorICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFs
UHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQor
I2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFtZSkgXAorICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVu
Y3Rpb25zKCkuYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucygpLm5hbWUjI1By
aXZhdGVOYW1lKCksIGFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1
bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCisgICAgV0VC
Q09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJ
T05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RB
VElDCisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkp
CisjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKSBcCisgICAgSlNET01HbG9iYWxP
YmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyggXAorICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5G
dW5jdGlvbnMoKS5ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRl
TmFtZSgpLCBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgp
ICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpSZWFkT25seSksCisgICAgV0VCQ09SRV9GT1JFQUNI
X0dVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xP
QkFMX1NUQVRJQykKKyN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJF
X0dMT0JBTF9TVEFUSUMobmFtZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9w
ZXJ0eUluZm8oIFwKKyAgICAgICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkueG1sQ2Fz
aW5nVGVzdEJ1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgeG1sQ2FzaW5nVGVzdCgpLm1f
IyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkp
LAorICAgIFdFQkNPUkVfRk9SRUFDSF9YTUxDQVNJTkdURVNUX0JVSUxUSU5fRlVOQ1RJT05fTkFN
RShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxfU1RBVElDCisj
ZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIH07CisgICAgZ2xvYmFsT2JqZWN0LmFk
ZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9i
YWxzKSk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudERhdGEpOworI2VuZGlmIC8vIEVOQUJMRShG
RVRDSF9BUEkpIHx8IEVOQUJMRShTVFJFQU1TX0FQSSkKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBjMDFhZWY4OTcyNWMxMzUxNTA4M2MzYThmYjlmOWE0N2E1OWRkYjU3
Li41OTNmNWU5YzkwZWU2NGM0OGZiMDMyODk3MWMyNjU1NWIwMTExYTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMzc0OCwyMSArMzc0OCwzMCBAQCBzZXQoQlVJTFRJTlNfR0VORVJBVE9SX1ND
UklQVFMKIAogZm9yZWFjaCAoX2J1aWx0aW5Tb3VyY2UgJHtXZWJDb3JlX0JVSUxUSU5TX1NPVVJD
RVN9KQogICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoX29iamVjdE5hbWUgJHtfYnVpbHRpblNv
dXJjZX0gTkFNRV9XRSkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElO
UyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5o
KQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNwcCkKKyAgICBhZGRf
Y3VzdG9tX2NvbW1hbmQoCisgICAgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5jcHAKKyAgICAgICAgICAgICAgICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmgKKyAgICAgICAg
TUFJTl9ERVBFTkRFTkNZICR7X2J1aWx0aW5Tb3VyY2V9CisgICAgICAgIERFUEVORFMgJHtCVUlM
VElOU19HRU5FUkFUT1JfU0NSSVBUU30KKyAgICAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRB
QkxFfSAke0phdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5w
eSAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRpcmVjdG9yeSAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0gJHtfYnVpbHRpblNvdXJjZX0KKyAgICAgICAgVkVSQkFUSU0pCisgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuY3BwKQorICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19v
YmplY3ROYW1lfUJ1aWx0aW5zLmgpCiBlbmRmb3JlYWNoICgpCi1saXN0KEFQUEVORCBXZWJDb3Jl
X0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29y
ZUpTQnVpbHRpbnMuaCkKLWxpc3QoQVBQRU5EIFdlYkNvcmVfR0VORVJBVEVEX0JVSUxUSU5TICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgp
Ci1saXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNF
U19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHApCiAKIGFkZF9jdXN0
b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtXZWJDb3JlX0dFTkVSQVRFRF9CVUlMVElOU30KKyAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5z
LmNwcAorICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgKKyAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAogICAgIE1BSU5fREVQRU5E
RU5DWSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30KICAgICBERVBFTkRTICR7QlVJTFRJTlNf
R0VORVJBVE9SX1NDUklQVFN9CiAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0ph
dmFTY3JpcHRDb3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLXdyYXBw
ZXJzIC0tZnJhbWV3b3JrIFdlYkNvcmUgLS1vdXRwdXQtZGlyZWN0b3J5ICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfSAke1dlYkNvcmVfQlVJTFRJTlNfU09VUkNFU30KICAgICBWRVJCQVRJ
TSkKLQotbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtXZWJDb3JlX0dFTkVS
QVRFRF9CVUlMVElOU30pCitsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbnMuY3BwKQorbGlzdChB
UFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwKQorbGlzdChBUFBFTkQgV2ViQ29yZV9E
RVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1
aWx0aW5zLmgpCitsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oKQogCiBBRERf
U09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRFTkNJRVMoJHtXRUJDT1JFX0RJUn0vaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwIE1hdGhNTE5hbWVzLmNwcCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggYjg1MjRiYzI1NzRhYWY4ZDYxNGQyYjgxYjE3M2E4YWEwZTc4NWQ2MS4u
ODI2OWQ1YWUwNDVhNDM3MWEyOTE1MDliYTJhNGJkYTc1YmQyNTg4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCkBAIC0xMzE5LDE4ICsxMzE5LDI2IEBAIEJVSUxUSU5TX0dFTkVSQVRP
Ul9TQ1JJUFRTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2xhenl3cml0
ZXIucHkgXAogIwogCitXZWJDb3JlX0JVSUxUSU5TX1dSQVBQRVJTID0gXAorICAgIFdlYkNvcmVK
U0J1aWx0aW5zLmggXAorICAgIFdlYkNvcmVKU0J1aWx0aW5zLmNwcCBcCisgICAgV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5oIFwKKyAgICBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcCBc
CisKICMgQWRkaW5nL3JlbW92aW5nIHNjcmlwdHMgc2hvdWxkIHRyaWdnZXIgcmVnZW5lcmF0aW9u
LCBidXQgY2hhbmdpbmcgd2hpY2ggYnVpbHRpbnMgYXJlCiAjIGdlbmVyYXRlZCBzaG91bGQgbm90
IGFmZmVjdCBvdGhlciBidWlsdGlucyB3aGVuIG5vdCBwYXNzaW5nICctLWNvbWJpbmVkJyB0byB0
aGUgZ2VuZXJhdG9yLgotIyBXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRV9MSVNUID0gJChzaGVsbCBl
Y2hvICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKSB8IHBlcmwgLWUgJ3ByaW50ICIgIiAuIGpv
aW4oIiAtSSIsIHNwbGl0KCIgIiwgPD4pKTsnKQogCiAuUEhPTlk6IGZvcmNlCiBXZWJDb3JlX0JV
SUxUSU5TX0RFUEVOREVOQ0lFU19MSVNUIDogJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
VXBkYXRlQ29udGVudHMucHkgZm9yY2UKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJ
UFRTX0RJUikvVXBkYXRlQ29udGVudHMucHkgJyQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMp
JyAkQAogCitXZWJDb3JlX0JVSUxUSU5TX1dSQVBQRVJTIDogV2ViQ29yZV9CVUlMVElOU19ERVBF
TkRFTkNJRVNfTElTVAogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9n
ZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLXdyYXBwZXJzIC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0t
ZnJhbWV3b3JrIFdlYkNvcmUgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpCiAKKyVCdWlsdGlu
cy5oOiAlLmpzICQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMpIFdlYkNvcmVfQlVJTFRJTlNf
REVQRU5ERU5DSUVTX0xJU1QKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJ
UikvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1vdXRwdXQtZGlyZWN0b3J5IC4gLS1mcmFtZXdv
cmsgV2ViQ29yZSAkPAogCi1hbGwgOiBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19MSVNU
CithbGwgOiAkKG5vdGRpciAkKFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFUzolLmpzPSVCdWlsdGlu
cy5oKSkgV2ViQ29yZV9CVUlMVElOU19XUkFQUEVSUwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggYWRkNTU4OWRiNzY2YTE1NjBkZWQwZjEyZWYwNDkxODgwYzQ2YTRkMy4uMjAwY2IwMDQyYWFh
NjZhMmE4N2ZiOWI3YWQyN2Q3ODM4ODJhZDM2ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA3LTIxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBydW4tYnVpbHRpbnMtZ2Vu
ZXJhdG9yLXRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFw
cGVyIHdpdGggbW9yZSB0aGFuIG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3QgcnVubmVy
IHRvIGdlbmVyYXRlIFdlYkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBhbGwgV2ViQ29yZSB2
YWxpZCBzZXBhcmF0ZSBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29kZWdl
bi9tYWluLnB5OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9t
X2pzX2J1aWx0aW5zKTogUGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxlcyB0byB0aGUgc2Ny
aXB0LgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChCdWlsdGlu
c0dlbmVyYXRvclRlc3RzLnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0byBoYW5kbGUgdGhl
IGNhc2Ugb2Ygc2luZ2xlIGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5zR2Vu
ZXJhdG9yVGVzdHMud3JhcHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8gaGFuZGxlIHRoZSBj
YXNlIG9mIFdlYkNvcmUgd3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgorICAgICAgICAoQnVp
bHRpbnNHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5lIHRvIHJ1biBhIHRl
c3QgaW4gcmVzZXQgbW9kZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAgICAgKEJ1aWx0aW5z
R2VuZXJhdG9yVGVzdHMucnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2ViQ29yZSB3cmFwcGVy
cyBidWlsdGluIGdlbmVyYXRpb24gdGVzdC4KKwogMjAxNi0wNy0yMSAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViIHZpZXcgYmFj
a2dyb3VuZCBjb2xvcnMgZG9uJ3Qgd29yayBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2Rl
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5CmluZGV4IGNiODg0ZDFhNWNiYWUy
Mjc4MmNjNDAwODc3ODg1ZjNhZWE3YzIzNjYuLjE0MTQ3M2UxMWVhMjE5MTU4NDM0OTZlNzFkZDE2
YmViZTMxYjkwYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9t
YWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29kZWdlbi9tYWluLnB5CkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYu
cmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBl
eGVjdXRpdmUKIAotICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKHNlbGYsIGJ1aWx0
aW5zX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPSIiLCBjb21iaW5lZF9v
dXRwdXRzPUZhbHNlLCBnZW5lcmF0ZV93cmFwcGVyPUZhbHNlKToKKyAgICBkZWYgZ2VuZXJhdGVf
ZnJvbV9qc19idWlsdGlucyhzZWxmLCBidWlsdGluc19maWxlcywgb3V0cHV0X2RpcmVjdG9yeSwg
ZnJhbWV3b3JrX25hbWU9IiIsIGNvbWJpbmVkX291dHB1dHM9RmFsc2UsIGdlbmVyYXRlX3dyYXBw
ZXJzPUZhbHNlKToKICAgICAgICAgY21kID0gWydweXRob24nLAogICAgICAgICAgICAgICAgJ0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHknLAogICAgICAgICAg
ICAgICAgJy0tb3V0cHV0LWRpcmVjdG9yeScsIG91dHB1dF9kaXJlY3RvcnksCkBAIC00OCwxNiAr
NDgsMTUgQEAgY2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0czoKICAgICAgICAgaWYgY29tYmlu
ZWRfb3V0cHV0czoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tY29tYmluZWQnKQogCi0gICAg
ICAgIGlmIGdlbmVyYXRlX3dyYXBwZXI6CisgICAgICAgIGlmIGdlbmVyYXRlX3dyYXBwZXJzOgog
ICAgICAgICAgICAgY21kLmFwcGVuZCgnLS13cmFwcGVycycpCiAKLSAgICAgICAgY21kLmFwcGVu
ZChidWlsdGluc19maWxlKQotCisgICAgICAgIGNtZC5leHRlbmQoYnVpbHRpbnNfZmlsZXMpCiAg
ICAgICAgIGV4aXRfY29kZSA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3RkZXJyX291
dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKICAgICAgICAgICAgIGlmIHN0
ZGVycl9vdXRwdXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9lcnJvcl9maWxlKGJ1aWx0
aW5zX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIHN0ZGVycl9vdXRwdXQpCisgICAgICAgICAgICAg
ICAgc2VsZi53cml0ZV9lcnJvcl9maWxlKGZyYW1ld29ya19uYW1lICsgIkpTQnVpbHRpbnMuaC1l
cnJvciIgaWYgZ2VuZXJhdGVfd3JhcHBlcnMgZWxzZSBidWlsdGluc19maWxlc1swXSwgb3V0cHV0
X2RpcmVjdG9yeSwgc3RkZXJyX291dHB1dCkKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBl
OgogICAgICAgICAgICAgcHJpbnQgZS5vdXRwdXQKICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUu
ZXhpdF9jb2RlCkBAIC05MywzNyArOTIsNjEgQEAgY2xhc3MgQnVpbHRpbnNHZW5lcmF0b3JUZXN0
czoKICAgICAgICAgICAgICAgICBwcmludCAnUEFTUzogJXMnICUgb3V0cHV0X2ZpbGUKICAgICAg
ICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRf
ZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBkZWYgc2luZ2xlX2J1aWx0aW5f
dGVzdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5KToKKyAgICAg
ICAgKGZyYW1ld29ya19uYW1lLCB0ZXN0X2Nhc2UsIG91dHB1dF9tb2RlKSA9IHRlc3RfbmFtZS5z
cGxpdCgnLScpCisgICAgICAgIGlmIG5vdCBmcmFtZXdvcmtfbmFtZSBvciBub3Qgb3V0cHV0X21v
ZGUgb3Igbm90IHRlc3RfY2FzZToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIHRlc3QgY2Fz
ZSBuYW1lOiBzaG91bGQgYmUgRnJhbWV3b3JrLVRlc3RDYXNlTmFtZS1PdXRwdXRNb2RlLmpzIgor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgY29tYmluZWRfb3V0cHV0cyA9IG91
dHB1dF9tb2RlID09ICJDb21iaW5lZCIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfZnJv
bV9qc19idWlsdGlucyh0ZXN0X2ZpbGVzLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9
ZnJhbWV3b3JrX25hbWUsIGNvbWJpbmVkX291dHB1dHM9Y29tYmluZWRfb3V0cHV0cykKKworICAg
IGRlZiB3cmFwcGVyc19idWlsdGluX3Rlc3Qoc2VsZiwgdGVzdF9uYW1lLCB0ZXN0X2ZpbGVzLCB3
b3JrX2RpcmVjdG9yeSk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2Zyb21fanNfYnVp
bHRpbnModGVzdF9maWxlcywgd29ya19kaXJlY3RvcnksIGZyYW1ld29ya19uYW1lPSJXZWJDb3Jl
IiwgZ2VuZXJhdGVfd3JhcHBlcnM9VHJ1ZSkKKworICAgIGRlZiBydW5fdGVzdChzZWxmLCByZWZl
cmVuY2VfZGlyZWN0b3J5LCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIGdlbmVyYXRlX2J1aWx0aW5f
Y2FsbGJhY2spOgorICAgICAgICBwYXNzZWQgPSBUcnVlCisgICAgICAgICMgR2VuZXJhdGUgb3V0
cHV0IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChlaXRoZXIgdGhlIGdpdmVuIG9uZSBvciBhIHRl
bXAgb25lIGlmIHJlc2V0X3Jlc3VsdHMgaXMgbm90IHBlcmZvcm1lZCkKICAgICAgICAgd29ya19k
aXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CisgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0
X3Jlc3VsdHM6CisgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAo
ImJ1aWx0aW4tZ2VuZXJhdG9yLXRlc3RzIikKKworICAgICAgICBpZiBnZW5lcmF0ZV9idWlsdGlu
X2NhbGxiYWNrKHRlc3RfbmFtZSwgdGVzdF9maWxlcywgd29ya19kaXJlY3RvcnkpOgorICAgICAg
ICAgICAgcGFzc2VkID0gRmFsc2UKIAorICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6Cisg
ICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKHRlc3RfbmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBEZXRlY3QgY2hhbmdlcwor
ICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2Vf
ZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIHNodXRpbC5y
bXRyZWUod29ya19kaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBwYXNzZWQKKworICAgIGRlZiBy
dW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKICAg
ICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlcyA9
IFtdCiAgICAgICAgIGZvciBpbnB1dF9maWxlIGluIG9zLmxpc3RkaXIoaW5wdXRfZGlyZWN0b3J5
KToKICAgICAgICAgICAgICh0ZXN0X25hbWUsIGV4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0
KGlucHV0X2ZpbGUpCiAgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gJy5qcyc6CiAgICAgICAg
ICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICMgR2VuZXJhdGUgb3V0cHV0IGludG8gdGhl
IHdvcmsgZGlyZWN0b3J5IChlaXRoZXIgdGhlIGdpdmVuIG9uZSBvciBhCi0gICAgICAgICAgICAj
IHRlbXAgb25lIGlmIG5vdCByZXNldF9yZXN1bHRzIGlzIHBlcmZvcm1lZCkKLSAgICAgICAgICAg
IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgd29ya19kaXJlY3Rv
cnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLQotICAgICAgICAgICAgKGZyYW1ld29ya19uYW1lLCB0
ZXN0X2Nhc2UsIG91dHB1dF9tb2RlKSA9IHRlc3RfbmFtZS5zcGxpdCgnLScpCi0gICAgICAgICAg
ICBpZiBub3QgZnJhbWV3b3JrX25hbWUgb3Igbm90IG91dHB1dF9tb2RlIG9yIG5vdCB0ZXN0X2Nh
c2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5hbWU6IHNob3Vs
ZCBiZSBGcmFtZXdvcmstVGVzdENhc2VOYW1lLU91dHB1dE1vZGUuanMiCi0gICAgICAgICAgICAg
ICAgY29udGludWUKIAotICAgICAgICAgICAgY29tYmluZWRfb3V0cHV0cyA9IG91dHB1dF9tb2Rl
ID09ICJDb21iaW5lZCIKLSAgICAgICAgICAgIGdlbmVyYXRlX3dyYXBwZXIgPSBmcmFtZXdvcmtf
bmFtZSA9PSAiV2ViQ29yZSIKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19i
dWlsdGlucyhvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19k
aXJlY3RvcnksIGZyYW1ld29ya19uYW1lPWZyYW1ld29ya19uYW1lLCBjb21iaW5lZF9vdXRwdXRz
PWNvbWJpbmVkX291dHB1dHMsIGdlbmVyYXRlX3dyYXBwZXI9Z2VuZXJhdGVfd3JhcHBlcik6Cisg
ICAgICAgICAgICB0ZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1
dF9maWxlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuX3Rlc3QocmVmZXJlbmNlX2RpcmVj
dG9yeSwgdGVzdF9uYW1lLCBbdGVzdF9maWxlXSwgc2VsZi5zaW5nbGVfYnVpbHRpbl90ZXN0KToK
ICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCisgICAgICAgICAgICAjIEZJWE1FOiBB
ZGQgRXJyb3IgcGFyYW1ldGVyIGluIGZpbGVuYW1lIGFuZCBmaWx0ZXIgb3V0IHRoZXNlIGZpbGVz
IGhlcmUuCisgICAgICAgICAgICBpZiAnU2VwYXJhdGUnIGluIHRlc3RfbmFtZSBhbmQgJ1dlYkNv
cmUnIGluIHRlc3RfbmFtZSBhbmQgbm90ICdEdXBsaWNhdGUnIGluIHRlc3RfbmFtZToKKyAgICAg
ICAgICAgICAgICBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlcy5hcHBlbmQodGVzdF9maWxlKQor
CiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAgICAgICAgcHJp
bnQgIlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAlIChpbnB1dF9maWxlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKLSAgICAgICAg
ICAgIGlmIHNlbGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJl
Y3RvcnkpOgorICAgICAgICBpZiBzZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlczoKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0KHJlZmVyZW5jZV9kaXJlY3RvcnksICJXZWJDb3JlSlNC
dWlsdGlucy5oIiwgc2VwYXJhdGVseV9nZW5lcmF0ZWRfZmlsZXMsIHNlbGYud3JhcHBlcnNfYnVp
bHRpbl90ZXN0KToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQotICAgICAgICAgICAg
c2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKIAogICAgICAgICByZXR1cm4gcGFzc2VkCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284315</attachid>
            <date>2016-07-22 01:03:57 -0700</date>
            <delta_ts>2016-07-22 01:33:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-159921-20160722100254.patch</filename>
            <type>text/plain</type>
            <size>97172</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTlhNmVjOGI3YzcyZTQxNGRlMGFiNmMyMGEyOWI4NzAzODAxMTliLi44M2M5MzZlN2FiYmE4YzVm
MjA2NzcxZTU5NGRjZTQ3YmYwNGUxYzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNi0wNy0yMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CisKKyAgICAgICAgcnVuLWJ1aWx0aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0
byB0ZXN0IFdlYkNvcmUgYnVpbHRpbnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAgICBVcGRhdGVkIGJ1aWx0
LWluIGdlbmVyYXRvciB0byBnZW5lcmF0ZSBvbmx5IHdyYXBwZXIgZmlsZXMgd2hlbiBwYXNzZWQg
dGhlIC0td3JhcHBlcnMtb25seSBvcHRpb24uCisgICAgICAgIFdoZW4gdGhpcyBvcHRpb24gaXMg
dXNlZCwgd3JhcHBlciBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ1dCBubyBpbmRpdmlkdWFsIGZpbGUg
aXMgZ2VuZXJhdGVkLgorICAgICAgICBXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCBpbmRp
dmlkdWFsIGZpbGVzIGFyZSBnZW5lcmF0ZWQgYnV0IG5vdCB3cmFwcGVyIGZpbGUgaXMgZ2VuZXJh
dGVkLgorICAgICAgICBUaGlzIGFsbG93cyB0aGUgYnVpbHRpbiBnZW5lcmF0b3IgdGVzdCBydW5u
ZXIgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgV2ViQ29yZS1XcmFwcGVycy5oLXJlc3VsdCBnZW5lcmF0
ZWQgZm9yIGFsbAorICAgICAgICBXZWJDb3JlIHRlc3QgZmlsZXMsIGxpa2UgdXNlZCBmb3IgcmVh
bCBpbiBXZWJDb3JlLgorICAgICAgICBQcmV2aW91c2x5IHdyYXBwZXIgY29kZSB3YXMgZ2VuZXJh
dGVkIGluZGl2aWR1YWxseSBmb3IgZWFjaCBXZWJDb3JlIHRlc3QgZmlsZS4KKworICAgICAgICBB
ZGRlZCBuZXcgYnVpbHQtaW4gdGVzdCBmaWxlIHRvIGNvdmVyIHRoZSBjYXNlIG9mIGNvbmNhdGVu
YXRpbmcgc2V2ZXJhbCBndWFyZHMgaW4gZ2VuZXJhdGVkIFdlYkNvcmUgd3JhcHBlciBmaWxlcy4K
KworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHk6CisgICAgICAgIChj
b25jYXRlbmF0ZWRfb3V0cHV0X2ZpbGVuYW1lKTogQ29tcHV0ZSBhIGRlY2VudCBuYW1lIGZvciB3
cmFwcGVyIGZpbGVzIGluIGNhc2Ugb2YgdGVzdCBtb2RlLgorICAgICAgICAoZ2VuZXJhdGVfYmlu
ZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKTogV2hlbiAtLXdyYXBwZXJzLW9ubHkgaXMgYWN0aXZh
dGVkLCB0aGlzIGdlbmVyYXRlcyBvbmx5IHRoZSB3cmFwcGVyIGZpbGVzLCBub3QgdGhlIGluZGl2
aWR1YWwgZmlsZXMuCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9XZWJDb3JlLUFu
b3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJ
bnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxH
dWFyZC1TZXBhcmF0ZS5qcy1yZXN1bHQ6IFJlbW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAq
IFNjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkQnVpbHRpbi1T
ZXBhcmF0ZS5qcy1yZXN1bHQ6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJl
c3VsdDogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9X
ZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0OiBEaXR0by4KKyAgICAg
ICAgKiBTY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2FzaW5nVGVz
dC1TZXBhcmF0ZS5qcy1yZXN1bHQ6IFJlbW92ZWQgd3JhcHBlciBjb2RlLgorICAgICAgICAqIFNj
cmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZUpTQnVpbHRpbnMuaC1yZXN1bHQ6
IEFkZGVkLCBjb250YWlucyB3cmFwcGVyIGNvZGUgZm9yIGFsbCBXZWJDb3JlIHZhbGlkIHRlc3Qg
Y2FzZXMuCisKIDIwMTYtMDctMjEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgY2FsbE9wZXJhdGlvbiguKSB2YXJpYW50cyBpbiB0aGUgREZHIHRoYXQgZXhwbGlj
aXRseSB0YWtlIGEgdGFnL3BheWxvYWQgcmVnaXN0ZXIgc2hvdWxkIHRha2UgYSBKU1ZhbHVlUmVn
cyBpbnN0ZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ4MjNmNmE0MTBkZTMyMzc1YzQ5ZmY5ZjEzYjgwZThm
NGNjYTIyOS4uZmFjMzM5YTk1ODdhM2QyYjZhMzU0YzM0NGY3MGY1ZGQ3MWUyMWFhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA3LTIyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KKworICAgICAgICBydW4tYnVpbHRpbnMtZ2VuZXJhdG9yLXRlc3RzIHNob3Vs
ZCBiZSBhYmxlIHRvIHRlc3QgV2ViQ29yZSBidWlsdGlucyB3cmFwcGVyIHdpdGggbW9yZSB0aGFu
IG9uZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTk5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBCdXJnLgorCisgICAgICAgIENv
dmVyZWQgYnkgZXhpc3RpbmcgYW5kIGFkZGVkIGJ1aWx0LWlucyB0ZXN0cy4KKworICAgICAgICBV
cGRhdGluZyBidWlsdCBzeXN0ZW0gYWNjb3JkaW5nIC0tLXdyYXBwZXJzLW9ubHkgbmV3IG1lYW5p
bmcuCisgICAgICAgIGJ1aWx0aW4gZ2VuZXJhdG9yIGlzIG5vdyBjYWxsZWQgZm9yIGVhY2ggaW5k
aXZpZHVhbCBidWlsdC1pbiBmaWxlIHBsdXMgb25jZSBmb3IgV2ViQ29yZSB3cmFwcGVyIGZpbGVz
LgorICAgICAgICBXZWJDb3JlIHdyYXBwZXIgZmlsZXMgYWxsb3cgaGFuZGxpbmcgdGhpbmdzIGxp
a2UgY29uZGl0aW9uYWxseSBndWFyZGVkIGZlYXR1cmVzLgorICAgICAgICBUaGV5IGFsc28gcmVt
b3ZlIHRoZSBuZWVkIHRvIHVzZSBidWlsdC1pbnMgbWFjcm9zIG91dHNpZGUgZ2VuZXJhdGVkIGNv
ZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorCiAyMDE2LTA3LTIxICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNb3ZlIHBhcnNpbmcgb2YgYWNjZW50dW5kZXIgYW5kIGFjY2VudCBhdHRyaWJ1
dGVzIGZyb20gcmVuZGVyZXIgdG8gZWxlbWVudCBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CmluZGV4IGQ5ZTdj
MTUwZWRhMGYzZmYzODY1NjIzNDU5ZTYyNmU0M2JlMWE5MWYuLjkxMWYxMzZjYmU1M2U1YTZjODUx
MmNiMDZmNTA1Y2ZiZWI5NzIzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
Y3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CkBAIC0zNywxNSArMzcsMjAgQEAgbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIGZyb20gbGF6eXdyaXRlciBpbXBvcnQg
TGF6eUZpbGVXcml0ZXIKIAotaW1wb3J0IGJ1aWx0aW5zCiBmcm9tIGJ1aWx0aW5zIGltcG9ydCAq
CiAKIAorZGVmIGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZy
YW1ld29ya19uYW1lLCBnZW5lcmF0ZV9vbmx5X3dyYXBwZXJfZmlsZXMpOgorICAgIGlmIGdlbmVy
YXRlX29ubHlfd3JhcHBlcl9maWxlczoKKyAgICAgICAgcmV0dXJuIGZyYW1ld29ya19uYW1lICsg
J0pTQnVpbHRpbnMuaC1yZXN1bHQnCisgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUoYnVpbHRp
bnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnCisKKwogZGVmIGdlbmVyYXRlX2JpbmRpbmdzX2Zvcl9i
dWlsdGluc19maWxlcyhidWlsdGluc19maWxlcz1bXSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZF9vdXRwdXQ9RmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX3dyYXBwZXJf
ZmlsZXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlX29ubHlfd3JhcHBlcl9maWxlcz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSk6CiAKQEAgLTcxLDE2ICs3
NiwxNiBAQCBkZWYgZ2VuZXJhdGVfYmluZGluZ3NfZm9yX2J1aWx0aW5zX2ZpbGVzKGJ1aWx0aW5z
X2ZpbGVzPVtdLAogICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0NvbWJpbmVkSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IobW9kZWwpKQogICAgIGVsc2U6CiAgICAgICAgIGxvZy5kZWJ1
ZygiVXNpbmcgZ2VuZXJhdG9yIHN0eWxlOiBzaW5nbGUgZmlsZXMgZm9yIGVhY2ggYnVpbHRpbi4i
KQotICAgICAgICBmb3Igb2JqZWN0IGluIG1vZGVsLm9iamVjdHM6Ci0gICAgICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSGVhZGVyR2VuZXJhdG9yKG1vZGVsLCBvYmpl
Y3QpKQotICAgICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKG1vZGVsLCBvYmplY3QpKQotCi0gICAgICAgIGlmIGdlbmVyYXRl
X3dyYXBwZXJfZmlsZXM6CisgICAgICAgIGlmIGdlbmVyYXRlX29ubHlfd3JhcHBlcl9maWxlczoK
ICAgICAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJ1aWx0aW5zV3JhcHBlckhlYWRlckdlbmVy
YXRvcihtb2RlbCkpCiAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1dyYXBw
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCiAKICAgICAgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKEJ1aWx0aW5zSW50ZXJuYWxzV3JhcHBlckhlYWRlckdlbmVyYXRvcihtb2RlbCkp
CiAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc0ludGVybmFsc1dyYXBwZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihtb2RlbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBmb3Igb2JqZWN0IGluIG1vZGVsLm9iamVjdHM6CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQnVpbHRpbnNTZXBhcmF0ZUhlYWRlckdlbmVyYXRvcihtb2RlbCwgb2JqZWN0KSkK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChCdWlsdGluc1NlcGFyYXRlSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IobW9kZWwsIG9iamVjdCkpCiAKICAgICBsb2cuZGVidWcoIiIpCiAg
ICAgbG9nLmRlYnVnKCJHZW5lcmF0aW5nIGJpbmRpbmdzIGZvciBidWlsdGlucy4iKQpAQCAtMTA3
LDkgKzExMiw5IEBAIGRlZiBnZW5lcmF0ZV9iaW5kaW5nc19mb3JfYnVpbHRpbnNfZmlsZXMoYnVp
bHRpbnNfZmlsZXM9W10sCiAgICAgICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgpCiAKICAgICBp
ZiBjb25jYXRlbmF0ZV9vdXRwdXQ6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9z
LnBhdGguYmFzZW5hbWUoYnVpbHRpbnNfZmlsZXNbMF0pICsgJy1yZXN1bHQnKQorICAgICAgICBm
aWxlbmFtZSA9IGNvbmNhdGVuYXRlZF9vdXRwdXRfZmlsZW5hbWUoYnVpbHRpbnNfZmlsZXMsIGZy
YW1ld29ya19uYW1lLCBnZW5lcmF0ZV9vbmx5X3dyYXBwZXJfZmlsZXMpCiAgICAgICAgIG91dHB1
dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgZmlsZW5hbWUpCi0gICAgICAg
IGxvZy5kZWJ1ZygiV3JpdGluZyBmaWxlOiAlcyIgJSBvdXRwdXRfZmlsZXBhdGgpIAorICAgICAg
ICBsb2cuZGVidWcoIldyaXRpbmcgZmlsZTogJXMiICUgb3V0cHV0X2ZpbGVwYXRoKQogICAgICAg
ICBvdXRwdXRfZmlsZSA9IExhenlGaWxlV3JpdGVyKG91dHB1dF9maWxlcGF0aCwgZm9yY2Vfb3V0
cHV0KQogICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgnXG4nLmpvaW4odGVzdF9yZXN1bHRfZmls
ZV9jb250ZW50cykpCiAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKQEAgLTEyMiw3ICsxMjcs
NyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlv
bigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3Jr
X25hbWVzLCBoZWxwPSJEZXN0aW5hdGlvbiBmcmFtZXdvcmsgZm9yIGdlbmVyYXRlZCBmaWxlcy4i
KQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsIGhlbHA9IkZvcmNlIG91dHB1dCBvZiBnZW5lcmF0ZWQgc2NyaXB0cywgZXZlbiBpZiBub3Ro
aW5nIGNoYW5nZWQuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tY29tYmluZWQiLCBh
Y3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJQcm9kdWNlIG9uZSAuaC8uY3BwIGZpbGUgaW5zdGVh
ZCBvZiBwcm9kdWNpbmcgb25lIHBlciBidWlsdGluIG9iamVjdC4iKQotICAgIGNsaV9wYXJzZXIu
YWRkX29wdGlvbigiLS13cmFwcGVycyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByb2R1
Y2UgLmgvLmNwcCB3cmFwcGVyIGZpbGVzIHRvIGVhc2UgaW50ZWdyYXRpb24gb2YgdGhlIGJ1aWx0
aW5zLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXdyYXBwZXJzLW9ubHkiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBoZWxwPSJQcm9kdWNlIC5oLy5jcHAgd3JhcHBlciBmaWxlcyB0byBl
YXNlIGludGVncmF0aW9uIG9mIHRoZSBidWlsdGlucy4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29w
dGlvbigiLXYiLCAiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkxvZyBleHRy
YSBvdXRwdXQgZm9yIGRlYnVnZ2luZyB0aGUgZ2VuZXJhdG9yIGl0c2VsZi4iKQogICAgIGNsaV9w
YXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVs
cD0iRW5hYmxlIHRlc3QgbW9kZS4iKQogCkBAIC0xNDcsNyArMTUyLDcgQEAgaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKICAgICAgICAgJ291dHB1dF9wYXRoJzogYXJnX29wdGlvbnMub3V0cHV0
X2RpcmVjdG9yeSwKICAgICAgICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3
b3JrLAogICAgICAgICAnY29tYmluZWRfb3V0cHV0JzogYXJnX29wdGlvbnMuY29tYmluZWQsCi0g
ICAgICAgICdnZW5lcmF0ZV93cmFwcGVyX2ZpbGVzJzogYXJnX29wdGlvbnMud3JhcHBlcnMsCisg
ICAgICAgICdnZW5lcmF0ZV9vbmx5X3dyYXBwZXJfZmlsZXMnOiBhcmdfb3B0aW9ucy53cmFwcGVy
c19vbmx5LAogICAgICAgICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UsCiAgICAg
ICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0LAogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL1dlYkNv
cmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9XZWJDb3JlLUFub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZmFlM2ZlMjY3ZTJiZjg4
YWYwZTgyMzg1NWIwMTdmZDIwYjVjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9XZWJDb3JlLUFub3RoZXJHdWFyZGVkSW50
ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBAY29uZGl0aW9uYWw9RU5BQkxFKEZF
VENIX0FQSSkKKy8vIEBpbnRlcm5hbAorCitmdW5jdGlvbiBsZXRzRmV0Y2goKQoreworICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIEBmZXRjaFJlcXVlc3QobmV3IEBSZXF1ZXN0KCJ5ZXMi
KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9i
dWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1
aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2Vw
YXJhdGUuanMtcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNGZkMDMwMTQwNDA2YTA3NTBkNDEyYzM2OGE1
ZDlmZTQ4ZmQ1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFub3RoZXJHdWFyZGVkSW50ZXJu
YWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMCwwICsxLDIyNyBAQAorIyMjIEJlZ2lu
IEZpbGU6IEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
KiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5z
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKworI2luY2x1ZGUg
PGJ1aWx0aW5zL0J1aWx0aW5VdGlscy5oPgorI2luY2x1ZGUgPGJ5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmg+CisjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRnVu
Y3Rpb25FeGVjdXRhYmxlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIEFub3RoZXJH
dWFyZGVkSW50ZXJuYWxCdWlsdGluICovCitleHRlcm4gY29uc3QgY2hhciogc19hbm90aGVyR3Vh
cmRlZEludGVybmFsQnVpbHRpbkxldHNGZXRjaENvZGU7CitleHRlcm4gY29uc3QgaW50IHNfYW5v
dGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlTGVuZ3RoOworZXh0ZXJuIGNv
bnN0IEpTQzo6Q29uc3RydWN0QWJpbGl0eSBzX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGlu
TGV0c0ZldGNoQ29kZUNvbnN0cnVjdEFiaWxpdHk7CisKKyNkZWZpbmUgV0VCQ09SRV9GT1JFQUNI
X0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fREFUQShtYWNybykgXAorICAg
IG1hY3JvKGxldHNGZXRjaCwgYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2gs
IDApIFwKKworI2RlZmluZSBXRUJDT1JFX0JVSUxUSU5fQU5PVEhFUkdVQVJERURJTlRFUk5BTEJV
SUxUSU5fTEVUU0ZFVENIIDEKKworI2RlZmluZSBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJE
RURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKG1hY3JvKSBcCisgICAgbWFjcm8oYW5vdGhl
ckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlLCBsZXRzRmV0Y2gsIHNfYW5vdGhl
ckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5MZXRzRmV0Y2hDb2RlTGVuZ3RoKSBcCisKKyNkZWZpbmUg
V0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVO
Q1RJT05fTkFNRShtYWNybykgXAorICAgIG1hY3JvKGxldHNGZXRjaCkgXAorCisjZGVmaW5lIERF
Q0xBUkVfQlVJTFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRD
b3VudCkgXAorICAgIEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlKiBjb2RlTmFtZSMjR2VuZXJhdG9y
KEpTQzo6Vk0mKTsKKworV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlM
VElOX0JVSUxUSU5fQ09ERShERUNMQVJFX0JVSUxUSU5fR0VORVJBVE9SKQorI3VuZGVmIERFQ0xB
UkVfQlVJTFRJTl9HRU5FUkFUT1IKKworY2xhc3MgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0
aW5CdWlsdGluc1dyYXBwZXIgOiBwcml2YXRlIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3Jh
cHBlcihKU0M6OlZNKiB2bSkKKyAgICAgICAgOiBtX3ZtKCp2bSkKKyAgICAgICAgV0VCQ09SRV9G
T1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVOQ1RJT05fTkFN
RShJTklUSUFMSVpFX0JVSUxUSU5fTkFNRVMpCisjZGVmaW5lIElOSVRJQUxJWkVfQlVJTFRJTl9T
T1VSQ0VfTUVNQkVSUyhuYW1lLCBmdW5jdGlvbk5hbWUsIGxlbmd0aCkgLCBtXyMjbmFtZSMjU291
cmNlKEpTQzo6bWFrZVNvdXJjZShTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChzXyMjbmFt
ZSwgbGVuZ3RoKSkpCisgICAgICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVS
TkFMQlVJTFRJTl9CVUlMVElOX0NPREUoSU5JVElBTElaRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJT
KQorI3VuZGVmIElOSVRJQUxJWkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUworICAgIHsKKyAgICB9
CisKKyNkZWZpbmUgRVhQT1NFX0JVSUxUSU5fRVhFQ1VUQUJMRVMobmFtZSwgZnVuY3Rpb25OYW1l
LCBsZW5ndGgpIFwKKyAgICBKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuYW1lIyNF
eGVjdXRhYmxlKCk7IFwKKyAgICBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIG5hbWUjI1NvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fIyNuYW1lIyNTb3VyY2U7IH0KKyAgICBXRUJDT1JFX0ZPUkVBQ0hf
QU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKEVYUE9TRV9CVUlMVElO
X0VYRUNVVEFCTEVTKQorI3VuZGVmIEVYUE9TRV9CVUlMVElOX0VYRUNVVEFCTEVTCisKKyAgICBX
RUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5D
VElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9JREVOVElGSUVSX0FDQ0VTU09SKQorCisgICAgdm9p
ZCBleHBvcnROYW1lcygpOworCitwcml2YXRlOgorICAgIEpTQzo6Vk0mIG1fdm07CisKKyAgICBX
RUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9GVU5D
VElPTl9OQU1FKERFQ0xBUkVfQlVJTFRJTl9OQU1FUykKKworI2RlZmluZSBERUNMQVJFX0JVSUxU
SU5fU09VUkNFX01FTUJFUlMobmFtZSwgZnVuY3Rpb25OYW1lLCBsZW5ndGgpIFwKKyAgICBKU0M6
OlNvdXJjZUNvZGUgbV8jI25hbWUjI1NvdXJjZTtcCisgICAgSlNDOjpXZWFrPEpTQzo6VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fIyNuYW1lIyNFeGVjdXRhYmxlOworICAgIFdFQkNPUkVf
Rk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0NPREUoREVDTEFS
RV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQorI3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0Vf
TUVNQkVSUworCit9OworCisjZGVmaW5lIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTKG5hbWUs
IGZ1bmN0aW9uTmFtZSwgbGVuZ3RoKSBcCitpbmxpbmUgSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZSogQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluc1dyYXBwZXI6Om5h
bWUjI0V4ZWN1dGFibGUoKSBcCit7XAorICAgIGlmICghbV8jI25hbWUjI0V4ZWN1dGFibGUpXAor
ICAgICAgICBtXyMjbmFtZSMjRXhlY3V0YWJsZSA9IEpTQzo6V2VhazxKU0M6OlVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlPihKU0M6OmNyZWF0ZUJ1aWx0aW5FeGVjdXRhYmxlKG1fdm0sIG1fIyNu
YW1lIyNTb3VyY2UsIGZ1bmN0aW9uTmFtZSMjUHVibGljTmFtZSgpLCBzXyMjbmFtZSMjQ29uc3Ry
dWN0QWJpbGl0eSksIHRoaXMsICZtXyMjbmFtZSMjRXhlY3V0YWJsZSk7XAorICAgIHJldHVybiBt
XyMjbmFtZSMjRXhlY3V0YWJsZS5nZXQoKTtcCit9CitXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdV
QVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0VYRUNVVEFC
TEVTKQorI3VuZGVmIERFRklORV9CVUlMVElOX0VYRUNVVEFCTEVTCisKK2lubGluZSB2b2lkIEFu
b3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyOjpleHBvcnROYW1lcygp
Cit7CisjZGVmaW5lIEVYUE9SVF9GVU5DVElPTl9OQU1FKG5hbWUpIG1fdm0ucHJvcGVydHlOYW1l
cy0+YXBwZW5kRXh0ZXJuYWxOYW1lKG5hbWUjI1B1YmxpY05hbWUoKSwgbmFtZSMjUHJpdmF0ZU5h
bWUoKSk7CisgICAgV0VCQ09SRV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElO
X0JVSUxUSU5fRlVOQ1RJT05fTkFNRShFWFBPUlRfRlVOQ1RJT05fTkFNRSkKKyN1bmRlZiBFWFBP
UlRfRlVOQ1RJT05fTkFNRQorfQorCitjbGFzcyBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRp
bkJ1aWx0aW5GdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkgOiBtX3ZtKHZtKSB7
IH0KKworICAgIHZvaWQgaW5pdChKU0M6OkpTR2xvYmFsT2JqZWN0Jik7CisgICAgdm9pZCB2aXNp
dChKU0M6OlNsb3RWaXNpdG9yJik7CisKK3B1YmxpYzoKKyAgICBKU0M6OlZNJiBtX3ZtOworCisj
ZGVmaW5lIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUyhmdW5jdGlvbk5hbWUpIFwKKyAg
ICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1fIyNmdW5jdGlvbk5hbWUjI0Z1
bmN0aW9uOworICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFMQlVJTFRJ
Tl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9CVUlMVElOX1NPVVJDRV9NRU1CRVJTKQor
I3VuZGVmIERFQ0xBUkVfQlVJTFRJTl9TT1VSQ0VfTUVNQkVSUworfTsKKworaW5saW5lIHZvaWQg
QW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zOjppbml0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyNkZWZpbmUgRVhQT1JUX0ZVTkNUSU9O
KGNvZGVOYW1lLCBmdW5jdGlvbk5hbWUsIGxlbmd0aClcCisgICAgbV8jI2Z1bmN0aW9uTmFtZSMj
RnVuY3Rpb24uc2V0KG1fdm0sICZnbG9iYWxPYmplY3QsIEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
QnVpbHRpbkZ1bmN0aW9uKG1fdm0sIGNvZGVOYW1lIyNHZW5lcmF0b3IobV92bSksICZnbG9iYWxP
YmplY3QpKTsKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxU
SU5fQlVJTFRJTl9DT0RFKEVYUE9SVF9GVU5DVElPTikKKyN1bmRlZiBFWFBPUlRfRlVOQ1RJT04K
K30KKworaW5saW5lIHZvaWQgQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVu
Y3Rpb25zOjp2aXNpdChKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworI2RlZmluZSBWSVNJ
VF9GVU5DVElPTihuYW1lKSB2aXNpdG9yLmFwcGVuZCgmbV8jI25hbWUjI0Z1bmN0aW9uKTsKKyAg
ICBXRUJDT1JFX0ZPUkVBQ0hfQU5PVEhFUkdVQVJERURJTlRFUk5BTEJVSUxUSU5fQlVJTFRJTl9G
VU5DVElPTl9OQU1FKFZJU0lUX0ZVTkNUSU9OKQorI3VuZGVmIFZJU0lUX0ZVTkNUSU9OCit9CisK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkK
KyMjIyBFbmQgRmlsZTogQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0
aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRl
LWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBbm90aGVy
R3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJ
KQorCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
RXhlY3V0YWJsZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBKU0M6OkNvbnN0
cnVjdEFiaWxpdHkgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkxldHNGZXRjaENvZGVD
b25zdHJ1Y3RBYmlsaXR5ID0gSlNDOjpDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3Q7
Citjb25zdCBpbnQgc19hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkxldHNGZXRjaENvZGVM
ZW5ndGggPSA4MjsKK3N0YXRpYyBjb25zdCBKU0M6OkludHJpbnNpYyBzX2Fub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29kZUludHJpbnNpYyA9IEpTQzo6Tm9JbnRyaW5zaWM7
Citjb25zdCBjaGFyKiBzX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluTGV0c0ZldGNoQ29k
ZSA9CisgICAgIihmdW5jdGlvbiAoKVxuIiBcCisgICAgIntcbiIgXAorICAgICIgICBcInVzZSBz
dHJpY3RcIjtcbiIgXAorICAgICIgICAgcmV0dXJuIEBmZXRjaFJlcXVlc3QobmV3IEBSZXF1ZXN0
KFwieWVzXCIpKTtcbiIgXAorICAgICJ9KVxuIiBcCis7CisKKworI2RlZmluZSBERUZJTkVfQlVJ
TFRJTl9HRU5FUkFUT1IoY29kZU5hbWUsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRDb3VudCkgXAor
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGNvZGVOYW1lIyNHZW5lcmF0b3IoSlNDOjpWTSYgdm0p
IFwKK3tcCisgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOyBcCisgICAgcmV0dXJuIGNsaWVudERhdGEtPmJ1
aWx0aW5GdW5jdGlvbnMoKS5hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCku
Y29kZU5hbWUjI0V4ZWN1dGFibGUoKS0+bGluayh2bSwgY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0
aW9ucygpLmFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMoKS5jb2RlTmFtZSMj
U291cmNlKCksIE51bGxvcHQsIHNfIyNjb2RlTmFtZSMjSW50cmluc2ljKTsgXAorfQorV0VCQ09S
RV9GT1JFQUNIX0FOT1RIRVJHVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJ
TkVfQlVJTFRJTl9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SCisK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkK
KworIyMjIEVuZCBGaWxlOiBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRp
bnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpz
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4
cGVjdGVkL1dlYkNvcmUtQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZC1TZXBhcmF0ZS5qcy1yZXN1
bHQKaW5kZXggYzRhYzc4MmRhOTM2ZWY2ZDVmYzVhM2U1NTM1ZGM2OTdkMGI4ZTYzYi4uNGQ3MGE4
YTEwYzFiNDFhZmZlMTZhNGY0MTc0ODQxNjIwNWE1NzYwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1BcmJp
dHJhcnlDb25kaXRpb25hbEd1YXJkLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUFyYml0
cmFyeUNvbmRpdGlvbmFsR3VhcmQtU2VwYXJhdGUuanMtcmVzdWx0CkBAIC0xOTUsMjIwICsxOTUs
MyBAQCBXRUJDT1JFX0ZPUkVBQ0hfQVJCSVRSQVJZQ09ORElUSU9OQUxHVUFSRF9CVUlMVElOX0NP
REUoREVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQ
SSkgfHwgVVNFKENGKQogCiAjIyMgRW5kIEZpbGU6IEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRC
dWlsdGlucy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRp
bnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBcmJpdHJhcnlDb25kaXRpb25hbEd1
YXJkQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSlNCdWlsdGluRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBKU0J1aWx0aW5GdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAgICAgIDogbV92bSh2bSkKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKLSAgICAgICAgLCBtX2FyYml0cmFyeUNv
bmRpdGlvbmFsR3VhcmRCdWlsdGlucygmbV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19B
UEkpIHx8IFVTRShDRikKLSAgICB7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8
fCBVU0UoQ0YpCi0gICAgQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zV3JhcHBlciYg
YXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zKCkgeyByZXR1cm4gbV9hcmJpdHJhcnlD
b25kaXRpb25hbEd1YXJkQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
IHx8IFVTRShDRikKLQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotI2lmIEVOQUJMRShT
VFJFQU1TX0FQSSkgfHwgVVNFKENGKQotICAgIEFyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWls
dGluc1dyYXBwZXIgbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnM7Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCi19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5v
biBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3Jp
cHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVkZSAiQXJiaXRy
YXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpT
QnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRp
bnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNs
YXNzIEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3Qm
KTsKLQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0j
IyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkK
LSAgICA6IG1fdm0odm0pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1
aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJu
YWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
LXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRh
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnRE
YXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0ds
b2JhbHNbXSA9IHsKLSAgICB9OwotICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0
YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNF
RF9QQVJBTShjbGllbnREYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVu
ZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1H
dWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdAppbmRleCA4ZDEzZDZhOGVjMDMwNWRlZGZjOWJmYzk5ZDZjYzdlMDU1
MTFiZmNlLi4zZjgxMzI1MWE0MzhmMGQ4MTdhZjcwYjJlMjdhOGIxNjA2OTUyZjkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3Rl
ZC9XZWJDb3JlLUd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1
YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMTk1LDIyMCArMTk1LDMgQEAgV0VC
Q09SRV9GT1JFQUNIX0dVQVJERURCVUlMVElOX0JVSUxUSU5fQ09ERShERUZJTkVfQlVJTFRJTl9H
RU5FUkFUT1IpCiAjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQogCiAjIyMgRW5kIEZpbGU6
IEd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3VhcmRl
ZEJ1aWx0aW5CdWlsdGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4
cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZt
KQotI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX2d1YXJkZWRCdWlsdGluQnVp
bHRpbnMoJm1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIHsKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dy
YXBwZXImIGd1YXJkZWRCdWlsdGluQnVpbHRpbnMoKSB7IHJldHVybiBtX2d1YXJkZWRCdWlsdGlu
QnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZhdGU6Ci0g
ICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3VhcmRlZEJ1
aWx0aW5CdWlsdGluc1dyYXBwZXIgbV9ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotI2VuZGlmIC8v
IEVOQUJMRShTVFJFQU1TX0FQSSkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBF
bmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IK
LS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRz
L2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNpbmNsdWRlICJHdWFyZGVkQnVpbHRpbkJ1aWx0
aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9u
cyhKU0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImKTsKLSAgICB2
b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQotCi1wcml2YXRlOgotICAgIEpT
Qzo6Vk0mIG1fdm07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6
IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpT
QnVpbHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZp
bGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKLQotI2luY2x1ZGUgIkpTRE9N
R2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1
ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zOjpKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUo
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLQotICAgIEpTVk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4obV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9i
amVjdDo6R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICB9OwotICAg
IGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9M
RU5HVEgoc3RhdGljR2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMv
dGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNl
cGFyYXRlLmpzLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1
aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtR3VhcmRlZEludGVybmFsQnVpbHRpbi1TZXBhcmF0ZS5q
cy1yZXN1bHQKaW5kZXggOWY0NjE2ZjczZDEyMGE0MGRjZGEwMzcyMjU3NzBkMzBmYjRmNmQ3Yi4u
MjJhZTUxZTc5ZjQ2MjE0ZTE3MTg5NmZhMzVhNWM1MzAzZmFlODk1MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29y
ZS1HdWFyZGVkSW50ZXJuYWxCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLUd1
YXJkZWRJbnRlcm5hbEJ1aWx0aW4tU2VwYXJhdGUuanMtcmVzdWx0CkBAIC0yMjcsMjUyICsyMjcs
MyBAQCBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0NPREUo
REVGSU5FX0JVSUxUSU5fR0VORVJBVE9SKQogI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
IAogIyMjIEVuZCBGaWxlOiBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
SmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVp
bHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25z
KEpTQzo6Vk0mIHZtKQotICAgICAgICA6IG1fdm0odm0pCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgICAgICAsIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQotI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB7Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQotICAgICAgICBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5leHBvcnROYW1lcygp
OwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1RS
RUFNU19BUEkpCi0gICAgR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3Vh
cmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxC
dWlsdGluQnVpbHRpbnM7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLXByaXZh
dGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgR3Vh
cmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0
aW5CdWlsdGluczsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAotLyoKLSAqIENvcHlyaWdodCAoYykg
MjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1idWlsdGlucy5weQotCi0jaW5jbHVk
ZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcCIKLSMjIyBFbmQgRmlsZTogV2Vi
Q29yZUpTQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50
ZXJuYWxzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8g
YnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuaCIKLSNpbmNsdWRlIDxydW50aW1lL1ZNLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWNsYXNzIEpT
QnVpbHRpbkludGVybmFsRnVuY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBKU0J1aWx0
aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJik7Ci0KLSAgICB2b2lkIHZpc2l0KEpTQzo6U2xv
dFZpc2l0b3ImKTsKLSAgICB2b2lkIGluaXRpYWxpemUoSlNET01HbG9iYWxPYmplY3QmKTsKLQot
I2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRp
bkZ1bmN0aW9ucyYgZ3VhcmRlZEludGVybmFsQnVpbHRpbigpIHsgcmV0dXJuIG1fZ3VhcmRlZElu
dGVybmFsQnVpbHRpbjsgfQotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLQotcHJpdmF0
ZToKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNDOjpWTSYgbV92bTsKLSNlbmRpZiAv
LyBFTkFCTEUoU1RSRUFNU19BUEkpCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEd1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zIG1fZ3VhcmRlZEludGVybmFsQnVpbHRp
bjsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMu
aCIKLQotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zOjpKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSNp
ZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgOiBtX3ZtKHZtKQotI2VuZGlmIC8vIEVOQUJMRShT
VFJFQU1TX0FQSSkKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgLCBtX2d1YXJkZWRJbnRl
cm5hbEJ1aWx0aW4obV92bSkKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHZtKTsKLX0KLQotdm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6
dmlzaXQoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCi0gICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLnZpc2l0KHZpc2l0b3IpOwotI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Ci19Ci0K
LXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluLmlu
aXQoZ2xvYmFsT2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0KLSNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCi0gICAgSlNWTUNsaWVudERhdGEmIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihtX3ZtLmNsaWVudERhdGEpOwotICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKLSNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpIFwK
LSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCi0gICAgICAgIGNs
aWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLmd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
cygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIGd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4oKS5tXyMjbmFt
ZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnREZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKLSAg
ICBXRUJDT1JFX0ZPUkVBQ0hfR1VBUkRFRElOVEVSTkFMQlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9O
X05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQotI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJ
QwotI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICB9OwotICAgIGdsb2JhbE9iamVj
dC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGlj
R2xvYmFscykpOwotICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRhKTsKLSNlbmRpZiAvLyBFTkFC
TEUoU1RSRUFNU19BUEkpCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmls
ZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUtVW5ndWFy
ZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2Ny
aXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLVVuZ3VhcmRlZEJ1aWx0aW4tU2Vw
YXJhdGUuanMtcmVzdWx0CmluZGV4IDllYTkyOGM4MDEwZjhiMGFlMTg2MGRkOTJlYjcxMjRhNTA0
MzNlODkuLjZkNjhhZWFhMTkwYmNlZjhkZjVmMzE4ODU0MDJlZmIzNDJmNzUzYTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVk
L1dlYkNvcmUtVW5ndWFyZGVkQnVpbHRpbi1TZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS1V
bmd1YXJkZWRCdWlsdGluLVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMTg2LDIxNCArMTg2LDMgQEAg
V0VCQ09SRV9GT1JFQUNIX1VOR1VBUkRFREJVSUxUSU5fQlVJTFRJTl9DT0RFKERFRklORV9CVUlM
VElOX0dFTkVSQVRPUikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogIyMjIEVuZCBGaWxlOiBV
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNC
dWlsdGlucy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8v
IGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dl
bmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVW5ndWFy
ZGVkQnVpbHRpbkJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTQnVpbHRpbkZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgSlNCdWlsdGluRnVuY3Rpb25zKEpTQzo6Vk0mIHZtKQotICAgICAgICA6IG1fdm0o
dm0pCi0gICAgICAgICwgbV91bmd1YXJkZWRCdWlsdGluQnVpbHRpbnMoJm1fdm0pCi0gICAgewot
ICAgIH0KLQotICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXImIHVuZ3VhcmRlZEJ1
aWx0aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOyB9Ci0K
LXByaXZhdGU6Ci0gICAgSlNDOjpWTSYgbV92bTsKLSAgICBVbmd1YXJkZWRCdWlsdGluQnVpbHRp
bnNXcmFwcGVyIG1fdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUg
Q2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZh
U2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQotI2luY2x1ZGUgIlVu
Z3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5jcHAiCi0jIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0
aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1
aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotCi1jbGFzcyBK
U0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWls
dGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9pZCB2aXNpdChKU0M6OlNs
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0K
LQotcHJpdmF0ZToKLSAgICBKU0M6OlZNJiBtX3ZtOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgi
Ci0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0gICAg
OiBtX3ZtKHZtKQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci19Ci0KLXZvaWQgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBKU1ZNQ2xpZW50RGF0YSYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7
Ci0gICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxz
W10gPSB7Ci0gICAgfTsKLSAgICBnbG9iYWxPYmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNH
bG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFS
QU0oY2xpZW50RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSMjIyBFbmQgRmls
ZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmUteG1sQ2Fz
aW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0
cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlLXhtbENhc2luZ1Rlc3QtU2VwYXJhdGUu
anMtcmVzdWx0CmluZGV4IDRhMDBiZGZmMDU2ZGE5ZWZjZTIyNDU4OWEyMWE5M2MwOWU4OGIxY2Qu
LjlkYWU4OTc3NWJiZjExMDY0Njc5OTZjNDM3NDBiOWE0ODY0MGExMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1aWx0aW5zL2V4cGVjdGVkL1dlYkNv
cmUteG1sQ2FzaW5nVGVzdC1TZXBhcmF0ZS5qcy1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NjcmlwdHMvdGVzdHMvYnVpbHRpbnMvZXhwZWN0ZWQvV2ViQ29yZS14bWxDYXNpbmdU
ZXN0LVNlcGFyYXRlLmpzLXJlc3VsdApAQCAtMjc4LDI1MiArMjc4LDMgQEAgV0VCQ09SRV9GT1JF
QUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJTl9DT0RFKERFRklORV9CVUlMVElOX0dFTkVSQVRPUikK
ICNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCiAKICMjIyBFbmQgRmlsZTogeG1sQ2FzaW5n
VGVzdEJ1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICogCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIEphdmFTY3JpcHQgZmlsZXMgZm9yCi0vLyBidWlsdGlucyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1qcy1i
dWlsdGlucy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWls
dGlucy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgewotcHVibGljOgotICAgIGV4cGxpY2l0IEpTQnVp
bHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQotI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKLSAgICAgICAgLCBtX3htbENhc2luZ1Rlc3RCdWlsdGlucygmbV92bSkK
LSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgewotI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKLSAgICAgICAgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKLSNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfQotCi0jaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQotICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXImIHhtbENhc2luZ1Rlc3RCdWls
dGlucygpIHsgcmV0dXJuIG1feG1sQ2FzaW5nVGVzdEJ1aWx0aW5zOyB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQotCi1wcml2YXRlOgotICAgIEpTQzo6Vk0mIG1fdm07Ci0jaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQotICAgIFhNTENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXIgbV94bWxD
YXNpbmdUZXN0QnVpbHRpbnM7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqIAotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVzIGZvcgotLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKLQot
I2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5jcHAiCi0jIyMgRW5kIEZpbGU6IFdlYkNv
cmVKU0J1aWx0aW5zLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVy
bmFscy5oCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKiAKLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1
aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVy
YXRlLWpzLWJ1aWx0aW5zLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAieG1sQ2FzaW5n
VGVzdEJ1aWx0aW5zLmgiCi0jaW5jbHVkZSA8cnVudGltZS9WTS5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotCi1jbGFzcyBKU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9ucyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxG
dW5jdGlvbnMoSlNDOjpWTSYpOwotCi0gICAgdm9pZCB2aXNpdChKU0M6OlNsb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCBpbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCi0gICAgWE1MQ2FzaW5nVGVzdEJ1aWx0aW5GdW5jdGlvbnMmIHhtbENhc2lu
Z1Rlc3QoKSB7IHJldHVybiBtX3htbENhc2luZ1Rlc3Q7IH0KLSNlbmRpZiAvLyBFTkFCTEUoU1RS
RUFNU19BUEkpCi0KLXByaXZhdGU6Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEpTQzo6
Vk0mIG1fdm07Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKLSAgICBYTUxDYXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rl
c3Q7Ci0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotIyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiAKLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKLS8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxz
LmgiCi0KLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU0J1aWx0aW5JbnRl
cm5hbEZ1bmN0aW9uczo6SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCi0j
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIDogbV92bSh2bSkKLSNlbmRpZiAvLyBFTkFCTEUo
U1RSRUFNU19BUEkpCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgICwgbV94bWxDYXNpbmdU
ZXN0KG1fdm0pCi0jZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQotewotICAgIFVOVVNFRF9Q
QVJBTSh2bSk7Ci19Ci0KLXZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OnZpc2l0KEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAg
IG1feG1sQ2FzaW5nVGVzdC52aXNpdCh2aXNpdG9yKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCi0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotfQotCi12b2lkIEpTQnVpbHRpbklu
dGVybmFsRnVuY3Rpb25zOjppbml0aWFsaXplKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0jaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgIG1feG1sQ2FzaW5nVGVzdC5pbml0KGdsb2JhbE9iamVjdCk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQotCi0jaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIEpT
Vk1DbGllbnREYXRhJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
bV92bS5jbGllbnREYXRhKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJ
bmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCi0jZGVmaW5l
IERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1lKSBcCi0gICAgSlNET01HbG9iYWxPYmplY3Q6Okds
b2JhbFByb3BlcnR5SW5mbyggXAotICAgICAgICBjbGllbnREYXRhLmJ1aWx0aW5GdW5jdGlvbnMo
KS54bWxDYXNpbmdUZXN0QnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCB4bWxDYXNpbmdU
ZXN0KCkubV8jI25hbWUjI0Z1bmN0aW9uLmdldCgpICwgSlNDOjpEb250RGVsZXRlIHwgSlNDOjpS
ZWFkT25seSksCi0gICAgV0VCQ09SRV9GT1JFQUNIX1hNTENBU0lOR1RFU1RfQlVJTFRJTl9GVU5D
VElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJQykKLSN1bmRlZiBERUNMQVJFX0dMT0JBTF9T
VEFUSUMKLSNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCi0gICAgfTsKLSAgICBnbG9iYWxP
YmplY3QuYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0
YXRpY0dsb2JhbHMpKTsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50RGF0YSk7Ci0jZW5kaWYgLy8g
RU5BQkxFKFNUUkVBTVNfQVBJKQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jIyMgRW5k
IEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9XZWJDb3JlSlNC
dWlsdGlucy5oLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL3Rlc3RzL2J1
aWx0aW5zL2V4cGVjdGVkL1dlYkNvcmVKU0J1aWx0aW5zLmgtcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMx
ZjdkMTZkNzM4Y2NlNDJmZDRhOWUyZWE2MmY4NjlkZGI0ZmY4NmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy90ZXN0cy9idWlsdGlucy9leHBlY3RlZC9X
ZWJDb3JlSlNCdWlsdGlucy5oLXJlc3VsdApAQCAtMCwwICsxLDM0OSBAQAorIyMjIEJlZ2luIEZp
bGU6IFdlYkNvcmVKU0J1aWx0aW5zLmgKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24g
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0
IGZpbGVzIGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NjcmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmgiCisjaW5jbHVk
ZSAiQXJiaXRyYXJ5Q29uZGl0aW9uYWxHdWFyZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiR3VhcmRl
ZEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWls
dGlucy5oIgorI2luY2x1ZGUgIlVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5oIgorI2luY2x1ZGUg
InhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0J1aWx0aW5GdW5jdGlvbnMgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IEpTQnVpbHRpbkZ1bmN0aW9ucyhKU0M6OlZNJiB2bSkKKyAgICAgICAgOiBt
X3ZtKHZtKQorI2lmIEVOQUJMRShGRVRDSF9BUEkpCisgICAgICAgICwgbV9hbm90aGVyR3VhcmRl
ZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9B
UEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisgICAgICAgICwgbV9hcmJp
dHJhcnlDb25kaXRpb25hbEd1YXJkQnVpbHRpbnMoJm1fdm0pCisjZW5kaWYgLy8gRU5BQkxFKFNU
UkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAs
IG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFN
U19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgICAgICAsIG1fZ3VhcmRlZEludGVy
bmFsQnVpbHRpbkJ1aWx0aW5zKCZtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyAgICAgICAgLCBtX3VuZ3VhcmRlZEJ1aWx0aW5CdWlsdGlucygmbV92bSkKKyNpZiBFTkFCTEUo
U1RSRUFNU19BUEkpCisgICAgICAgICwgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnMoJm1fdm0pCisj
ZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIHsKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJ
KQorICAgICAgICBtX2Fub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhwb3J0
TmFtZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyAgICAgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuZXhwb3J0TmFt
ZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNf
QVBJKQorICAgICAgICBtX3htbENhc2luZ1Rlc3RCdWlsdGlucy5leHBvcnROYW1lcygpOworI2Vu
ZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9CisKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJ
KQorICAgIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyJiBhbm90
aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9hbm90aGVyR3Vh
cmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zOyB9CisjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQ
SSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpIHx8IFVTRShDRikKKyAgICBBcmJpdHJhcnlDb25k
aXRpb25hbEd1YXJkQnVpbHRpbnNXcmFwcGVyJiBhcmJpdHJhcnlDb25kaXRpb25hbEd1YXJkQnVp
bHRpbnMoKSB7IHJldHVybiBtX2FyYml0cmFyeUNvbmRpdGlvbmFsR3VhcmRCdWlsdGluczsgfQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorI2lmIEVOQUJMRShTVFJF
QU1TX0FQSSkKKyAgICBHdWFyZGVkQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEJ1aWx0
aW5CdWlsdGlucygpIHsgcmV0dXJuIG1fZ3VhcmRlZEJ1aWx0aW5CdWlsdGluczsgfQorI2VuZGlm
IC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgR3Vh
cmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zV3JhcHBlciYgZ3VhcmRlZEludGVybmFsQnVpbHRp
bkJ1aWx0aW5zKCkgeyByZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7IH0K
KyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgVW5ndWFyZGVkQnVpbHRpbkJ1aWx0
aW5zV3JhcHBlciYgdW5ndWFyZGVkQnVpbHRpbkJ1aWx0aW5zKCkgeyByZXR1cm4gbV91bmd1YXJk
ZWRCdWlsdGluQnVpbHRpbnM7IH0KKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgWE1MQ2Fz
aW5nVGVzdEJ1aWx0aW5zV3JhcHBlciYgeG1sQ2FzaW5nVGVzdEJ1aWx0aW5zKCkgeyByZXR1cm4g
bV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkp
CisKK3ByaXZhdGU6CisgICAgSlNDOjpWTSYgbV92bTsKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQor
ICAgIEFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1fYW5vdGhl
ckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hf
QVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkgfHwgVVNFKENGKQorICAgIEFyYml0cmFyeUNv
bmRpdGlvbmFsR3VhcmRCdWlsdGluc1dyYXBwZXIgbV9hcmJpdHJhcnlDb25kaXRpb25hbEd1YXJk
QnVpbHRpbnM7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKSB8fCBVU0UoQ0YpCisjaWYg
RU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRCdWlsdGluQnVpbHRpbnNXcmFwcGVyIG1f
Z3VhcmRlZEJ1aWx0aW5CdWlsdGluczsKKyNlbmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlu
c1dyYXBwZXIgbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluQnVpbHRpbnM7CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQorICAgIFVuZ3VhcmRlZEJ1aWx0aW5CdWlsdGluc1dyYXBwZXIgbV91
bmd1YXJkZWRCdWlsdGluQnVpbHRpbnM7CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIFhN
TENhc2luZ1Rlc3RCdWlsdGluc1dyYXBwZXIgbV94bWxDYXNpbmdUZXN0QnVpbHRpbnM7CisjZW5k
aWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
IyMjIEVuZCBGaWxlOiBXZWJDb3JlSlNCdWlsdGlucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBXZWJD
b3JlSlNCdWlsdGlucy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgQ2Fub24gSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIAorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKYXZhU2NyaXB0IGZpbGVz
IGZvcgorLy8gYnVpbHRpbnMgYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nj
cmlwdHMvZ2VuZXJhdGUtanMtYnVpbHRpbnMucHkKKworI2luY2x1ZGUgIkFub3RoZXJHdWFyZGVk
SW50ZXJuYWxCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1ZGUgIkFyYml0cmFyeUNvbmRpdGlv
bmFsR3VhcmRCdWlsdGlucy5jcHAiCisjaW5jbHVkZSAiR3VhcmRlZEJ1aWx0aW5CdWlsdGlucy5j
cHAiCisjaW5jbHVkZSAiR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5zLmNwcCIKKyNpbmNs
dWRlICJVbmd1YXJkZWRCdWlsdGluQnVpbHRpbnMuY3BwIgorI2luY2x1ZGUgInhtbENhc2luZ1Rl
c3RCdWlsdGlucy5jcHAiCisjIyMgRW5kIEZpbGU6IFdlYkNvcmVKU0J1aWx0aW5zLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oCisvKgorICogQ29weXJp
Z2h0IChjKSAyMDE1IENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gSmF2YVNjcmlwdCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5C
dWlsdGlucy5oIgorI2luY2x1ZGUgIkd1YXJkZWRJbnRlcm5hbEJ1aWx0aW5CdWlsdGlucy5oIgor
I2luY2x1ZGUgInhtbENhc2luZ1Rlc3RCdWlsdGlucy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVk0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKKwor
Y2xhc3MgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mKTsKKworICAgIHZvaWQgdmlzaXQo
SlNDOjpTbG90VmlzaXRvciYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShKU0RPTUdsb2JhbE9iamVj
dCYpOworCisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKyAgICBBbm90aGVyR3VhcmRlZEludGVybmFs
QnVpbHRpbkJ1aWx0aW5GdW5jdGlvbnMmIGFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWlsdGluKCkg
eyByZXR1cm4gbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbjsgfQorI2VuZGlmIC8vIEVO
QUJMRShGRVRDSF9BUEkpCisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIEd1YXJkZWRJbnRl
cm5hbEJ1aWx0aW5CdWlsdGluRnVuY3Rpb25zJiBndWFyZGVkSW50ZXJuYWxCdWlsdGluKCkgeyBy
ZXR1cm4gbV9ndWFyZGVkSW50ZXJuYWxCdWlsdGluOyB9CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVB
TVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxDYXNpbmdUZXN0QnVpbHRp
bkZ1bmN0aW9ucyYgeG1sQ2FzaW5nVGVzdCgpIHsgcmV0dXJuIG1feG1sQ2FzaW5nVGVzdDsgfQor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworcHJpdmF0ZToKKyNpZiBFTkFCTEUoRkVU
Q0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgSlNDOjpWTSYgbV92bTsKKyNlbmRp
ZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxF
KEZFVENIX0FQSSkKKyAgICBBbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbkJ1aWx0aW5GdW5j
dGlvbnMgbV9hbm90aGVyR3VhcmRlZEludGVybmFsQnVpbHRpbjsKKyNlbmRpZiAvLyBFTkFCTEUo
RkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBHdWFyZGVkSW50ZXJuYWxC
dWlsdGluQnVpbHRpbkZ1bmN0aW9ucyBtX2d1YXJkZWRJbnRlcm5hbEJ1aWx0aW47CisjZW5kaWYg
Ly8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBYTUxD
YXNpbmdUZXN0QnVpbHRpbkZ1bmN0aW9ucyBtX3htbENhc2luZ1Rlc3Q7CisjZW5kaWYgLy8gRU5B
QkxFKFNUUkVBTVNfQVBJKQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorIyMjIEVuZCBG
aWxlOiBXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKKworIyMjIEJlZ2luIEZpbGU6IFdlYkNv
cmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IENhbm9u
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAKKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gSmF2YVNjcmlw
dCBmaWxlcyBmb3IKKy8vIGJ1aWx0aW5zIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCisKKyNpbmNsdWRlICJK
U0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNp
bmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6SlNC
dWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdm0pCisjaWYgRU5BQkxFKEZFVENIX0FQ
SSkgfHwgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIDogbV92bSh2bSkKKyNlbmRpZiAvLyBFTkFC
TEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCisjaWYgRU5BQkxFKEZFVENIX0FQ
SSkKKyAgICAsIG1fYW5vdGhlckd1YXJkZWRJbnRlcm5hbEJ1aWx0aW4obV92bSkKKyNlbmRpZiAv
LyBFTkFCTEUoRkVUQ0hfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICAsIG1fZ3Vh
cmRlZEludGVybmFsQnVpbHRpbihtX3ZtKQorI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkK
KyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgLCBtX3htbENhc2luZ1Rlc3QobV92bSkKKyNl
bmRpZiAvLyBFTkFCTEUoU1RSRUFNU19BUEkpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKK30K
Kwordm9pZCBKU0J1aWx0aW5JbnRlcm5hbEZ1bmN0aW9uczo6dmlzaXQoSlNDOjpTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAgIG1fYW5vdGhlckd1YXJk
ZWRJbnRlcm5hbEJ1aWx0aW4udmlzaXQodmlzaXRvcik7CisjZW5kaWYgLy8gRU5BQkxFKEZFVENI
X0FQSSkKKyNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV9ndWFyZGVkSW50ZXJuYWxCdWls
dGluLnZpc2l0KHZpc2l0b3IpOworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyNpZiBF
TkFCTEUoU1RSRUFNU19BUEkpCisgICAgbV94bWxDYXNpbmdUZXN0LnZpc2l0KHZpc2l0b3IpOwor
I2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7
Cit9CisKK3ZvaWQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnM6OmluaXRpYWxpemUoSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKKyNpZiBFTkFCTEUoRkVUQ0hfQVBJKQorICAgIG1fYW5vdGhlckd1YXJkZWRJbnRlcm5h
bEJ1aWx0aW4uaW5pdChnbG9iYWxPYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkp
CisjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorICAgIG1fZ3VhcmRlZEludGVybmFsQnVpbHRpbi5p
bml0KGdsb2JhbE9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKKyAgICBtX3htbENhc2luZ1Rlc3QuaW5pdChnbG9iYWxPYmplY3Qp
OworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKworI2lmIEVOQUJMRShGRVRDSF9BUEkp
IHx8IEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICBKU1ZNQ2xpZW50RGF0YSYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KG1fdm0uY2xpZW50RGF0YSk7CisgICAgSlNE
T01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Cisj
aWYgRU5BQkxFKEZFVENIX0FQSSkKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUp
IFwKKyAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCisgICAgICAg
IGNsaWVudERhdGEuYnVpbHRpbkZ1bmN0aW9ucygpLmFub3RoZXJHdWFyZGVkSW50ZXJuYWxCdWls
dGluQnVpbHRpbnMoKS5uYW1lIyNQcml2YXRlTmFtZSgpLCBhbm90aGVyR3VhcmRlZEludGVybmFs
QnVpbHRpbigpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpT
Qzo6UmVhZE9ubHkpLAorICAgIFdFQkNPUkVfRk9SRUFDSF9BTk9USEVSR1VBUkRFRElOVEVSTkFM
QlVJTFRJTl9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3Vu
ZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJMRShGRVRDSF9BUEkpCisj
aWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorI2RlZmluZSBERUNMQVJFX0dMT0JBTF9TVEFUSUMobmFt
ZSkgXAorICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oIFwKKyAgICAg
ICAgY2xpZW50RGF0YS5idWlsdGluRnVuY3Rpb25zKCkuZ3VhcmRlZEludGVybmFsQnVpbHRpbkJ1
aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5hbWUoKSwgZ3VhcmRlZEludGVybmFsQnVpbHRpbigpLm1f
IyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIEpTQzo6RG9udERlbGV0ZSB8IEpTQzo6UmVhZE9ubHkp
LAorICAgIFdFQkNPUkVfRk9SRUFDSF9HVUFSREVESU5URVJOQUxCVUlMVElOX0JVSUxUSU5fRlVO
Q1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCisjdW5kZWYgREVDTEFSRV9HTE9CQUxf
U1RBVElDCisjZW5kaWYgLy8gRU5BQkxFKFNUUkVBTVNfQVBJKQorI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfU1RBVElDKG5hbWUpIFwKKyAgICBKU0RPTUds
b2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKCBcCisgICAgICAgIGNsaWVudERhdGEuYnVp
bHRpbkZ1bmN0aW9ucygpLnhtbENhc2luZ1Rlc3RCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1l
KCksIHhtbENhc2luZ1Rlc3QoKS5tXyMjbmFtZSMjRnVuY3Rpb24uZ2V0KCkgLCBKU0M6OkRvbnRE
ZWxldGUgfCBKU0M6OlJlYWRPbmx5KSwKKyAgICBXRUJDT1JFX0ZPUkVBQ0hfWE1MQ0FTSU5HVEVT
VF9CVUlMVElOX0ZVTkNUSU9OX05BTUUoREVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERF
Q0xBUkVfR0xPQkFMX1NUQVRJQworI2VuZGlmIC8vIEVOQUJMRShTVFJFQU1TX0FQSSkKKyAgICB9
OworICAgIGdsb2JhbE9iamVjdC5hZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9B
UlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnREYXRh
KTsKKyNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKSB8fCBFTkFCTEUoU1RSRUFNU19BUEkpCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyMjIyBFbmQgRmlsZTogV2ViQ29yZUpTQnVpbHRp
bkludGVybmFscy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzAzY2I4MTdmYTI5NWZjOGI1
YjgyMDEwNmY4NTYwYTEzNmJiZDZlMS4uYzllMzE0NDQ5NWYyNmUwMDQ2ZGIzZDU4MmM0YzcxOWIy
Nzg4ZDgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTM3NDksMjEgKzM3NDksMzAgQEAgc2V0
KEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTCiAKIGZvcmVhY2ggKF9idWlsdGluU291cmNlICR7
V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfSkKICAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9v
YmplY3ROYW1lICR7X2J1aWx0aW5Tb3VyY2V9IE5BTUVfV0UpCi0gICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7
X29iamVjdE5hbWV9QnVpbHRpbnMuaCkKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0dFTkVSQVRF
RF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1C
dWlsdGlucy5jcHApCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBPVVRQVVQgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9LyR7X29iamVjdE5hbWV9QnVpbHRpbnMuY3BwCisg
ICAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFt
ZX1CdWlsdGlucy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19idWlsdGluU291cmNlfQor
ICAgICAgICBERVBFTkRTICR7QlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFN9CisgICAgICAgIENP
TU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0v
Z2VuZXJhdGUtanMtYnVpbHRpbnMucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dC1kaXJl
Y3RvcnkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9ICR7X2J1aWx0aW5Tb3VyY2V9Cisg
ICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS8ke19vYmplY3ROYW1lfUJ1aWx0aW5zLmNw
cCkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vJHtfb2JqZWN0TmFtZX1CdWlsdGlucy5oKQogZW5kZm9yZWFjaCAo
KQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJTFRJTlMgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5zLmgpCi1saXN0KEFQUEVORCBXZWJDb3Jl
X0dFTkVSQVRFRF9CVUlMVElOUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29y
ZUpTQnVpbHRpbkludGVybmFscy5oKQotbGlzdChBUFBFTkQgV2ViQ29yZV9HRU5FUkFURURfQlVJ
TFRJTlMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRl
cm5hbHMuY3BwKQogCiBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgT1VUUFVUICR7V2ViQ29yZV9H
RU5FUkFURURfQlVJTFRJTlN9CisgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHAKKyAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwCisgICAgICAgICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5oCisgICAgICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJu
YWxzLmgKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVN9CiAg
ICAgREVQRU5EUyAke0JVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTfQotICAgIENPTU1BTkQgJHtQ
WVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUt
anMtYnVpbHRpbnMucHkgLS13cmFwcGVycyAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0LWRp
cmVjdG9yeSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0gJHtXZWJDb3JlX0JVSUxUSU5T
X1NPVVJDRVN9CisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRD
b3JlX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1qcy1idWlsdGlucy5weSAtLXdyYXBwZXJzLW9ubHkg
LS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dC1kaXJlY3RvcnkgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9ICR7V2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTfQogICAgIFZFUkJBVElNKQot
Ci1saXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke1dlYkNvcmVfR0VORVJBVEVE
X0JVSUxUSU5TfSkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGlucy5jcHApCitsaXN0KEFQUEVO
RCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
V2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5jcHApCitsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklW
RURfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vV2ViQ29yZUpTQnVpbHRp
bnMuaCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgpCiAKIEFERF9TT1VS
Q0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dFQkNPUkVfRElSfS9odG1sL0hUTUxU
cmVlQnVpbGRlci5jcHAgTWF0aE1MTmFtZXMuY3BwKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCBiYjdlY2JiYjZiOGZjMDYzNDk1NzcxNjczMTM0ZjRiZjI2ODRlMTI3Li40MjIz
NWViMTM0NzA3NjZmZmI3NjgzODBlYWY0YTM3Y2RlNmVjZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTEzMTksMTggKzEzMTksMjYgQEAgQlVJTFRJTlNfR0VORVJBVE9SX1ND
UklQVFMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvbGF6eXdyaXRlci5w
eSBcCiAjCiAKK1dlYkNvcmVfQlVJTFRJTlNfV1JBUFBFUlMgPSBcCisgICAgV2ViQ29yZUpTQnVp
bHRpbnMuaCBcCisgICAgV2ViQ29yZUpTQnVpbHRpbnMuY3BwIFwKKyAgICBXZWJDb3JlSlNCdWls
dGluSW50ZXJuYWxzLmggXAorICAgIFdlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuY3BwIFwKKwog
IyBBZGRpbmcvcmVtb3Zpbmcgc2NyaXB0cyBzaG91bGQgdHJpZ2dlciByZWdlbmVyYXRpb24sIGJ1
dCBjaGFuZ2luZyB3aGljaCBidWlsdGlucyBhcmUKICMgZ2VuZXJhdGVkIHNob3VsZCBub3QgYWZm
ZWN0IG90aGVyIGJ1aWx0aW5zIHdoZW4gbm90IHBhc3NpbmcgJy0tY29tYmluZWQnIHRvIHRoZSBn
ZW5lcmF0b3IuCi0jIFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFX0xJU1QgPSAkKHNoZWxsIGVjaG8g
JChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpIHwgcGVybCAtZSAncHJpbnQgIiAiIC4gam9pbigi
IC1JIiwgc3BsaXQoIiAiLCA8PikpOycpCiAKIC5QSE9OWTogZm9yY2UKIFdlYkNvcmVfQlVJTFRJ
TlNfREVQRU5ERU5DSUVTX0xJU1QgOiAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9VcGRh
dGVDb250ZW50cy5weSBmb3JjZQogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSKS9VcGRhdGVDb250ZW50cy5weSAnJChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyknICRA
CiAKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMt
YnVpbHRpbnMucHkgLS13cmFwcGVycyAtLW91dHB1dC1kaXJlY3RvcnkgLiAtLWZyYW1ld29yayBX
ZWJDb3JlICQoV2ViQ29yZV9CVUlMVElOU19TT1VSQ0VTKQorJChmaXJzdHdvcmQgJChXZWJDb3Jl
X0JVSUxUSU5TX1dSQVBQRVJTKSk6IFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5DSUVTX0xJU1QK
KwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtanMtYnVp
bHRpbnMucHkgLS13cmFwcGVycy1vbmx5IC0tb3V0cHV0LWRpcmVjdG9yeSAuIC0tZnJhbWV3b3Jr
IFdlYkNvcmUgJChXZWJDb3JlX0JVSUxUSU5TX1NPVVJDRVMpCiAKKyVCdWlsdGlucy5oOiAlLmpz
ICQoQlVJTFRJTlNfR0VORVJBVE9SX1NDUklQVFMpIFdlYkNvcmVfQlVJTFRJTlNfREVQRU5ERU5D
SUVTX0xJU1QKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJh
dGUtanMtYnVpbHRpbnMucHkgLS1vdXRwdXQtZGlyZWN0b3J5IC4gLS1mcmFtZXdvcmsgV2ViQ29y
ZSAkPAogCi1hbGwgOiBXZWJDb3JlX0JVSUxUSU5TX0RFUEVOREVOQ0lFU19MSVNUCithbGwgOiAk
KG5vdGRpciAkKFdlYkNvcmVfQlVJTFRJTlNfU09VUkNFUzolLmpzPSVCdWlsdGlucy5oKSkgJChm
aXJzdHdvcmQgJChXZWJDb3JlX0JVSUxUSU5TX1dSQVBQRVJTKSkKIAogIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGM3ZjFjOTNjMzQyZGQ4MTBhNGM2NmVmN2I2NWFiNGZmNTI4NDI0MzYuLmE4MmVj
MTg5ODBmNGNjMzQzNzYxMDhkMDY3MjEwZTc1MzJkOGRhYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0wNy0y
MiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgcnVuLWJ1aWx0
aW5zLWdlbmVyYXRvci10ZXN0cyBzaG91bGQgYmUgYWJsZSB0byB0ZXN0IFdlYkNvcmUgYnVpbHRp
bnMgd3JhcHBlciB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QnJpYW4gQnVyZy4KKworICAgICAgICBVcGRhdGVkIGJ1aWx0aW4gZ2VuZXJhdG9yIHRlc3QgcnVu
bmVyIHRvIGdlbmVyYXRlIFdlYkNvcmUgd3JhcHBlciBmaWxlcyBiYXNlZCBvbiBhbGwgV2ViQ29y
ZSB2YWxpZCBzZXBhcmF0ZSBmaWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29k
ZWdlbi9tYWluLnB5OgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9m
cm9tX2pzX2J1aWx0aW5zKTogUGFzc2luZyBhIGxpc3Qgb2YgYnVpbHRpbiBmaWxlcyB0byB0aGUg
c2NyaXB0LgorICAgICAgICAoQnVpbHRpbnNHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChCdWls
dGluc0dlbmVyYXRvclRlc3RzLnNpbmdsZV9idWlsdGluX3Rlc3QpOiBBZGRlZCB0byBoYW5kbGUg
dGhlIGNhc2Ugb2Ygc2luZ2xlIGJ1aWx0aW4gZ2VuZXJhdGlvbi4KKyAgICAgICAgKEJ1aWx0aW5z
R2VuZXJhdG9yVGVzdHMud3JhcHBlcnNfYnVpbHRpbl90ZXN0KTogQWRkZWQgdG8gaGFuZGxlIHRo
ZSBjYXNlIG9mIFdlYkNvcmUgd3JhcHBlcnMgYnVpbHRpbiBnZW5lcmF0aW9uLgorICAgICAgICAo
QnVpbHRpbnNHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdCk6IEhlbHBlciByb3V0aW5lIHRvIHJ1biBh
IHRlc3QgaW4gcmVzZXQgbW9kZSBvciBub3JtYWwgY2hlY2sgbW9kZS4KKyAgICAgICAgKEJ1aWx0
aW5zR2VuZXJhdG9yVGVzdHMucnVuX3Rlc3RzKTogVXBkYXRlZCB0byBhZGQgV2ViQ29yZSB3cmFw
cGVycyBidWlsdGluIGdlbmVyYXRpb24gdGVzdC4KKwogMjAxNi0wNy0yMSAgRGFuIEJlcm5zdGVp
biAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIHdlYmtpdGRpcnMucG0gY29udGFp
bnMgdW51c2VkIGNvZGUgdG8gc3VwcG9ydCBvdXRkYXRlZCBPUyBYIGFuZCBYY29kZSB2ZXJzaW9u
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb2RlZ2VuL21haW4ucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weQppbmRleCBjYjg4NGQxYTVjYmFl
MjI3ODJjYzQwMDg3Nzg4NWYzYWVhN2MyMzY2Li4zYjgxOWRmOGMxOGMxZmYzZDZiMWQwYTljOTJk
YzdhODc0ODQyYjQzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4v
bWFpbi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvZGVnZW4vbWFpbi5weQpAQCAt
MzcsNyArMzcsNyBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICBzZWxm
LnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRzCiAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0g
ZXhlY3V0aXZlCiAKLSAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyhzZWxmLCBidWls
dGluc19maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT0iIiwgY29tYmluZWRf
b3V0cHV0cz1GYWxzZSwgZ2VuZXJhdGVfd3JhcHBlcj1GYWxzZSk6CisgICAgZGVmIGdlbmVyYXRl
X2Zyb21fanNfYnVpbHRpbnMoc2VsZiwgYnVpbHRpbnNfZmlsZXMsIG91dHB1dF9kaXJlY3Rvcnks
IGZyYW1ld29ya19uYW1lPSIiLCBjb21iaW5lZF9vdXRwdXRzPUZhbHNlLCBnZW5lcmF0ZV93cmFw
cGVycz1GYWxzZSk6CiAgICAgICAgIGNtZCA9IFsncHl0aG9uJywKICAgICAgICAgICAgICAgICdK
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5JywKICAgICAgICAg
ICAgICAgICctLW91dHB1dC1kaXJlY3RvcnknLCBvdXRwdXRfZGlyZWN0b3J5LApAQCAtNDgsMTYg
KzQ4LDE1IEBAIGNsYXNzIEJ1aWx0aW5zR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIGlmIGNvbWJp
bmVkX291dHB1dHM6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWNvbWJpbmVkJykKIAotICAg
ICAgICBpZiBnZW5lcmF0ZV93cmFwcGVyOgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS13cmFw
cGVycycpCi0KLSAgICAgICAgY21kLmFwcGVuZChidWlsdGluc19maWxlKQorICAgICAgICBpZiBn
ZW5lcmF0ZV93cmFwcGVyczoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0td3JhcHBlcnMtb25s
eScpCiAKKyAgICAgICAgY21kLmV4dGVuZChidWlsdGluc19maWxlcykKICAgICAgICAgZXhpdF9j
b2RlID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQogICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoK
LSAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoYnVpbHRpbnNfZmlsZSwgb3V0
cHV0X2RpcmVjdG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRl
X2Vycm9yX2ZpbGUoZnJhbWV3b3JrX25hbWUgKyAiSlNCdWlsdGlucy5oLWVycm9yIiBpZiBnZW5l
cmF0ZV93cmFwcGVycyBlbHNlIGJ1aWx0aW5zX2ZpbGVzWzBdLCBvdXRwdXRfZGlyZWN0b3J5LCBz
dGRlcnJfb3V0cHV0KQogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CiAgICAgICAgICAg
ICBwcmludCBlLm91dHB1dAogICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKQEAg
LTkzLDM3ICs5Miw2MSBAQCBjbGFzcyBCdWlsdGluc0dlbmVyYXRvclRlc3RzOgogICAgICAgICAg
ICAgICAgIHByaW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQogICAgICAgICByZXR1cm4gY2hh
bmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJl
ZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgIGRlZiBzaW5nbGVfYnVpbHRpbl90ZXN0KHNlbGYsIHRl
c3RfbmFtZSwgdGVzdF9maWxlcywgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAoZnJhbWV3b3Jr
X25hbWUsIHRlc3RfY2FzZSwgb3V0cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0KCctJykKKyAg
ICAgICAgaWYgbm90IGZyYW1ld29ya19uYW1lIG9yIG5vdCBvdXRwdXRfbW9kZSBvciBub3QgdGVz
dF9jYXNlOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgdGVzdCBjYXNlIG5hbWU6IHNob3Vs
ZCBiZSBGcmFtZXdvcmstVGVzdENhc2VOYW1lLU91dHB1dE1vZGUuanMiCisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0X21vZGUgPT0g
IkNvbWJpbmVkIgorICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5z
KHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5LCBmcmFtZXdvcmtfbmFtZT1mcmFtZXdvcmtfbmFt
ZSwgY29tYmluZWRfb3V0cHV0cz1jb21iaW5lZF9vdXRwdXRzKQorCisgICAgZGVmIHdyYXBwZXJz
X2J1aWx0aW5fdGVzdChzZWxmLCB0ZXN0X25hbWUsIHRlc3RfZmlsZXMsIHdvcmtfZGlyZWN0b3J5
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc19idWlsdGlucyh0ZXN0X2Zp
bGVzLCB3b3JrX2RpcmVjdG9yeSwgZnJhbWV3b3JrX25hbWU9IldlYkNvcmUiLCBnZW5lcmF0ZV93
cmFwcGVycz1UcnVlKQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHJlZmVyZW5jZV9kaXJlY3Rv
cnksIHRlc3RfbmFtZSwgdGVzdF9maWxlcywgZ2VuZXJhdGVfYnVpbHRpbl9jYWxsYmFjayk6Cisg
ICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUg
d29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEgdGVtcCBvbmUgaWYgcmVz
ZXRfcmVzdWx0cyBpcyBub3QgcGVyZm9ybWVkKQogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJl
ZmVyZW5jZV9kaXJlY3RvcnkKKyAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAg
ICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgiYnVpbHRpbi1nZW5l
cmF0b3ItdGVzdHMiKQorCisgICAgICAgIGlmIGdlbmVyYXRlX2J1aWx0aW5fY2FsbGJhY2sodGVz
dF9uYW1lLCB0ZXN0X2ZpbGVzLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBwYXNzZWQg
PSBGYWxzZQogCisgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgIHBy
aW50ICJSZXNldCByZXN1bHRzIGZvciB0ZXN0OiAlcyIgJSAodGVzdF9uYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIERldGVjdCBjaGFuZ2VzCisgICAgICAgIGlmIHNl
bGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgor
ICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2Rp
cmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHBhc3NlZAorCisgICAgZGVmIHJ1bl90ZXN0cyhzZWxm
LCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICBwYXNzZWQg
PSBUcnVlCisgICAgICAgIHNlcGFyYXRlbHlfZ2VuZXJhdGVkX2ZpbGVzID0gW10KICAgICAgICAg
Zm9yIGlucHV0X2ZpbGUgaW4gb3MubGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgogICAgICAgICAg
ICAgKHRlc3RfbmFtZSwgZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoaW5wdXRfZmlsZSkK
ICAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAnLmpzJzoKICAgICAgICAgICAgICAgICBjb250
aW51ZQotICAgICAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3Rv
cnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEKLSAgICAgICAgICAgICMgdGVtcCBvbmUgaWYg
bm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVyZm9ybWVkKQotICAgICAgICAgICAgaWYgbm90IHNlbGYu
cmVzZXRfcmVzdWx0czoKLSAgICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxl
Lm1rZHRlbXAoKQotCi0gICAgICAgICAgICAoZnJhbWV3b3JrX25hbWUsIHRlc3RfY2FzZSwgb3V0
cHV0X21vZGUpID0gdGVzdF9uYW1lLnNwbGl0KCctJykKLSAgICAgICAgICAgIGlmIG5vdCBmcmFt
ZXdvcmtfbmFtZSBvciBub3Qgb3V0cHV0X21vZGUgb3Igbm90IHRlc3RfY2FzZToKLSAgICAgICAg
ICAgICAgICBwcmludCAiSW52YWxpZCB0ZXN0IGNhc2UgbmFtZTogc2hvdWxkIGJlIEZyYW1ld29y
ay1UZXN0Q2FzZU5hbWUtT3V0cHV0TW9kZS5qcyIKLSAgICAgICAgICAgICAgICBjb250aW51ZQog
Ci0gICAgICAgICAgICBjb21iaW5lZF9vdXRwdXRzID0gb3V0cHV0X21vZGUgPT0gIkNvbWJpbmVk
IgotICAgICAgICAgICAgZ2VuZXJhdGVfd3JhcHBlciA9IGZyYW1ld29ya19uYW1lID09ICJXZWJD
b3JlIgotICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzX2J1aWx0aW5zKG9zLnBh
dGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSwgZnJh
bWV3b3JrX25hbWU9ZnJhbWV3b3JrX25hbWUsIGNvbWJpbmVkX291dHB1dHM9Y29tYmluZWRfb3V0
cHV0cywgZ2VuZXJhdGVfd3JhcHBlcj1nZW5lcmF0ZV93cmFwcGVyKToKKyAgICAgICAgICAgIHRl
c3RfZmlsZSA9IG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpCisgICAg
ICAgICAgICBpZiBub3Qgc2VsZi5ydW5fdGVzdChyZWZlcmVuY2VfZGlyZWN0b3J5LCB0ZXN0X25h
bWUsIFt0ZXN0X2ZpbGVdLCBzZWxmLnNpbmdsZV9idWlsdGluX3Rlc3QpOgogICAgICAgICAgICAg
ICAgIHBhc3NlZCA9IEZhbHNlCiAKKyAgICAgICAgICAgICMgRklYTUU6IEFkZCBFcnJvciBwYXJh
bWV0ZXIgaW4gZmlsZW5hbWUgYW5kIGZpbHRlciBvdXQgdGhlc2UgZmlsZXMgaGVyZS4KKyAgICAg
ICAgICAgIGlmICdTZXBhcmF0ZScgaW4gdGVzdF9uYW1lIGFuZCAnV2ViQ29yZScgaW4gdGVzdF9u
YW1lIGFuZCBub3QgJ0R1cGxpY2F0ZScgaW4gdGVzdF9uYW1lOgorICAgICAgICAgICAgICAgIHNl
cGFyYXRlbHlfZ2VuZXJhdGVkX2ZpbGVzLmFwcGVuZCh0ZXN0X2ZpbGUpCisKICAgICAgICAgICAg
IGlmIHNlbGYucmVzZXRfcmVzdWx0czoKICAgICAgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVz
dWx0cyBmb3IgdGVzdDogJXMiICUgKGlucHV0X2ZpbGUpCiAgICAgICAgICAgICAgICAgY29udGlu
dWUKIAotICAgICAgICAgICAgIyBEZXRlY3QgY2hhbmdlcwotICAgICAgICAgICAgaWYgc2VsZi5k
ZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAg
ICAgIGlmIHNlcGFyYXRlbHlfZ2VuZXJhdGVkX2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IHNl
bGYucnVuX3Rlc3QocmVmZXJlbmNlX2RpcmVjdG9yeSwgIldlYkNvcmVKU0J1aWx0aW5zLmgiLCBz
ZXBhcmF0ZWx5X2dlbmVyYXRlZF9maWxlcywgc2VsZi53cmFwcGVyc19idWlsdGluX3Rlc3QpOgog
ICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCi0gICAgICAgICAgICBzaHV0aWwucm10cmVl
KHdvcmtfZGlyZWN0b3J5KQogCiAgICAgICAgIHJldHVybiBwYXNzZWQKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>